SSH项目--国税(框架整合二)

4。资源文件分类
1、将配置文件归类到新建config文件夹;
2、源代码目录按照功能模块进行划分:cn.itcast.子系统.功能模块.*
3、Jsp放置到WEB-INF目录下;
4、其它: 

5.日志工具配置
在控制台会报出日志log4j没有配置好配置文件的信息。

Slf4j 接口jar(slf4j-log4j12-1.6.1.jar)
log4j的jar包(com.springsource.org.apache.log4j-1.2.15),配置log4j.properties文件。

测试:
public class TestLog {
@Test
public void test(){
Log log = LogFactory.getLog(getClass());
log.debug("debug 级别日志");
log.info("info 级别日志");
log.warn("warn 级别日志");
log.error("error 级别日志");
log.fatal("fatal 级别日志");
}
}


log4j.rootLogger=warn, stdout, R
log4j.logger.cn.itcast=debug
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=F:/A/itcast.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%t] %5p %c - %m%n


将日志记录到本地。
@Test
public void test(){
Log log = LogFactory.getLog(getClass());
try{
int i = 1 / 0;
}catch (Exception e){
log.error(e.getMessage());
e.printStackTrace();
}
}


本地日志:2016-06-25 10:30:39,684 [main] ERROR cn.itcast.test.TestLog - / by zero
6.编写基类BaseDao
 DAO基类中配备增删改查的操作。
public interface BaseDao<T> {
//新增
public void save(T entity);
//更新
public void update(T entity);
//根据id删除
public void delete(Serializable id);
//根据id查找
public T findObjectById(Serializable id);
//查找列表
public List<T> findObjects();
}
public abstract class BaseDaoImpl<T> extendsHibernateDaoSupport implements BaseDao<T> {
Class<T> clazz;
public BaseDaoImpl(){
ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();//BaseDaoImpl<User>
clazz = (Class<T>)pt.getActualTypeArguments()[0];
}
@Override
public void save(T entity) {
getHibernateTemplate().save(entity);
}
@Override
public void update(T entity) {
getHibernateTemplate().update(entity);
}
@Override
public void delete(Serializable id) {
getHibernateTemplate().delete(findObjectById(id));
}
@Override
public T findObjectById(Serializable id) {
return getHibernateTemplate().get(clazz, id);
}
@Override
public List<T> findObjects() {
Query query = getSession().createQuery("FROM " +clazz.getSimpleName());
return query.list();
}
}


获取泛型类型:
// 使用反射得到T的真实类型
ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass(); // 获取当前new的对象的 泛型的父类类型
this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; //获取第一个类型参数的真实类型
}


3.用户管理
3.1实现CRUD的步骤及用户实体映射文件
1用户实体类及映射文件:Usre.java 和 User.hbm.xml
2实现UserDao、UserDaoImpl,直接继承BaseDao、BaseDaoImpl;
3编写UserService、UserService类,里面包括baseDao中的基本方法;
4UserAction中要实现增删改查,需要6个方法;我们约定需要跳转到页面的方法以UI结尾,如果addUI则说明这是跳转到添加页面,需要对应一个addUI.jsp。在删除、修改、添加完成后应该返回列表页面,这时为了避免重复提交返回使用重定向。
配置user-spring.xml,并将其导入到applicationContext.xml中,然后在applicatoinContext.xml中设置所有业务dao的父类dao,为baseDao中的HibernateDaoSupport注入sessionFactory。
<!-- 所有dao的parent -->
<bean name="baseDao" abstract="true">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
    <importresource="classpath:cn/itcast/nsfwentity/*.hbm.xml</value>


在user-spring.xml中的内容:
 
    
<bean id="userDao"class="cn.itcast.nsfw.user.dao.impl.UserDaoImpl"parent="baseDao"></bean>
    <!-- 扫描service -->
    <context:component-scanbase-package="cn.itcast.nsfw.user.service.impl"></context:component-scan>
<!-- 扫描action -->
    <context:component-scanbase-package="cn.itcast.nsfw.user.action"></context:component-scan>


3.2实现用户管理的CRUD方法及显示列表
在UserAction中至少需要有的6个方法:
listUI() --- 返回到列表页面对应listUI.jsp
addUI() --- 返回到添加页面对应addUI.jsp
add() --- 重定向到listUI
edit() --- 重定向到listUI
editUI() --- 返回到编辑页面对应editUI.jsp
delete() --- 删除用户完后重定向到listUI
设置完action后,配置user-struts.xml文件,里面对应各个方法对应的页面;最后将user-struts.xml包含到struts.xml文
件中。
接下来引入美工设计好的页面;将数据与页面结合展示。

3.3完成美工设计页面显示
将美工设计好的页面复制到项目中:
将js、css、image、分别放置到WebRoot目录下;其它的jsp对应复制。复制完成后针对jsp页面填充动态数据。
对应大多数页面样式和jquery都是需要的,所以我们把公共样式和jquery、struts标签库等信息抽出到一个header.jsp文件中,将此文件放入common公共文件目录。


3.4 批量删除
在用户列表listUI.jsp中设置好复选框<input type="checkbox"name="selectedRow" value='<s:property value="id"/>'/>,点击操作栏中的删除执行js脚本提交用户列表表单到后台UserAction,在action中使用数组接收勾选的用户id,然后在对该数组进行遍历删除。
//批量删除
public String deleteSelected(){
if(selectedRow != null){
for(String id: selectedRow){
userService.delete(id);
}
}
return "list";
}
js脚本:
function doSelectAll(){
// jquery 1.6 前
//$("input[name=selectedRow]").attr("checked",$("#selAll").is(":checked"));
//prop jquery 1.6+建议使用
$("input[name=selectedRow]").prop("checked",$("#selAll").is(":checked"));
}
3.5日期组件wdatepicker
导入WdataPicker文件包到项目的js文件夹下;
在用户管理中的添加、编辑jsp页面对生日表单项引入日期组件:
<script type="text/javascript"src="${basePath}js/datepicker/WdatePicker.js"></script>
用法:
<s:textfield id="birthday" name="user.birthday"readonly="true"
                        οnfοcus="WdatePicker({skin:'whyGreen',el:'birthday',dateFmt:'yyyy-MM-dd'})"/>
回显时,注意设置好显示格式;可以如下设置:
<s:textfield id="birthday" name="user.birthday"readonly="true"
                        οnfοcus="WdatePicker({skin:'whyGreen',el:'birthday',dateFmt:'yyyy-MM-dd'})">
                    <s:paramname="value"><s:date name='user.birthday' format='yyyy-MM-dd'/>
</s:param>    
          </s:textfield>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值