最近接了个接手了个擦屁股的J2EE项目,由于两年多没有写过J2EE项目了,加上接手时上一个人已经用他熟悉的框架结构做了很多东西,所以遇到很多问题,中间有些问题很有意思,现在项目总算差不多完成,特发此文以总结经验。
1、开发环境是Myeclipse 9.0+tomcat7.0.27,每次代码调试之后要看效果(尤其是页面模版调整一下,仅仅是改了css要看下效果)需要重新Redeploy,然后重启tomcat才能看到效果,非常浪费时间,后来百度发现早有高手解决此问题。
解决方法是:打开tomcat安装目录下的conf目录下的context.xml文件,在修改<Context>为<Context reloadable="true">,然后重启tomcat即可实现修改页面模版,自动更新的效果。
2、在Myeclipse中调试启动tomcat经常出现如下问题:Caused by: java.io.NotSerializableException: com.udiansoft.quality.pagemodel.RoleEditModel
严重: IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted;
......百度后发现也有高手解决此问题(http://happy2008hjp.blog.163.com/blog/static/1167014472009101344615438/)
解决方法同样是修改context.xml文件,在Context节点下添加如下代码即可:
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>
3、登陆后经常出现页面跳转到http://localhost:8080/favicon.ico的问题,百度N页无果,google香港版也是无果,不得已fq上google美国版才发现一篇英文的解决办法。
解决方法是:在ACEGI的配置文件ApplicationContext-security-acegi.xml中找到"PATTERN_TYPE_APACHE_ANT"字符串,在他下面添加一行"/favicon.ico=PRIV_ANONYMOUS"
4、 因为在ibatis2环境下,某些业务需要做大量的数据库操作业务,需要写很多sql时很不方便,所以便想用数据库的存储过程实现,在spring3+ibatis2环境下调用mysql存储过程的方法找了好多贴子,但都有这样那样的问题,最后参考多个帖子终于实现成功,记录如下:
xml文件中添加如下:
<parameterMap id="proAutoCreateDangerDailyProc" class="java.util.Map">
<parameter property="device_id" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="touserid" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="report_userid" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<procedure id="autoCreateDangerDailyProc" parameterMap="proAutoCreateDangerDailyProc">
<![CDATA[
{call autoCreateDangerDailyProc(?,?,?)}
]]>
</procedure>
然后DAO类extends SqlMapClientDaoSupport之后调用代码如下:
Map initMap = new HashMap();
initMap.put("device_id", device_id);
initMap.put("touserid", touserid);
initMap.put("report_userid", report_userid);
this.getSqlMapClientTemplate().insert("autoCreateDangerDailyProc", initMap);
5、因业务需要,要实现webwork2.2.5中同一namespace下内部Action之间带参数的跳转,从《WebWork in Action》找到实现方法如下:
配置xml文件中如下(注意红色部分):
<action name="auditSave" class="com.udiansoft.quality.action.modules.AuditSaveAction">
<external-ref name="userService">userService</external-ref>
<external-ref name="processlogService">processlogService</external-ref>
<result name="success" type="redirect">
<param name="location">auditEdit.do?fromtype=danger&id=${danger_id}</param>
</result>
<result name="error" type="freemarker">
<param name="location">/view/error/error.ftl</param>
</result>
<interceptor-ref name="WSStack" />
</action>
发起调用的Action中(这里是AuditSaveAction)实现代码如下:
首先定义变量:
private Integer id=0;
然后在execute()方法中:
id = danger_id;
return SUCCESS;
之后在被调用的Action(这里是AuditEditAction)的Model文件(这里是DangerEditModel)中增加变量id及其get和set方法,然后在Action(这里是AuditEditAction)的execute()方法中使用如下方式即可获取到参数:
int id = dangerEditModel.getId();