温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

雪山飞鹄

温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

BlogJava 首页 新随笔 联系 聚合 管理
  215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks

#

Struts2整合spring时应注意action的单实例问题
注意要设置,action bean 的 scope 的值。因为spring的bean默认为单实例singleton,故一定要设scope的值但不能为singleton。建议设置为prototype或request
posted @ 2009-10-20 16:54 雪山飞鹄 阅读(358) | 评论 (0)编辑 收藏

取值要通过<s:property value="" />或在任意的<s:/>标签内使用%{};

当Action的valueStack中有该属性的值时,只需直接使用该属性的名字即可;

当Action的valueStack中没有该属性的值时,比如在session,application范围中的属性值时,需要加#或者#attr.;

例子:
假设某Action中有person成员变量,在application中存在company属性
那么我们可以通过以下方法取值:
<s:property value="person.name" />
<s:property value="#person.name" />
<s:property value="company.name" /> //无法取到,因为company不在action的valueStack中
<s:property value="#company.name" />

<s:textfield name="person.name" value="person.name" /> //错误,value会直接显示person.name字样
<s:textfield name="person.name" value="%{person.name}" />
<s:textfield name="person.company.name" value="%{#company.name}" />
<s:textfield name="person.company.name" value="%{#attr.company.name}" />
posted @ 2009-10-19 14:16 雪山飞鹄 阅读(307) | 评论 (0)编辑 收藏

 

最近学习struts2是一个问题接着一个问题的遇到

刚解决了java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity

接着就来最讨厌的乱码问题,我数据库用的mysql,大家都知道mysql本省就有可能出现乱码,加之现在跟struts2混合在一起,指不定会出现什么乱七八糟的编码,这谁也说不清楚

整体思路那就是统一编码(所有的内容都采用同一个编码)

大概从这几个方面来排查

a)         首先确认mysql的字符编码,他默认为拉丁文,这里我修改为gbk

b)        jsp页面中明确指明编码类型

<%@ page language="java" contentType="text/html; charset=gbk"

pageEncoding="gbk"%>

上面的意思是指定tomcat的编码为gbk

<meta http-equiv="Content-Type" content="text/html; charset=gbk">

    下面的意思是指定web浏览器的编码为gbk

c)        习惯性的加上spring的字符过滤器

web.xml中添加过滤器

<filter>

        <filter-name>CharacterEncodingFilter</filter-name>

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

        <init-param>

            <param-name>encoding</param-name>

            <param-value>gbk</param-value>

        </init-param>

        <init-param>

            <param-name>forceEncoding</param-name>

            <param-value>true</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>CharacterEncodingFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

d)        最后别忘了在struts.xmlstruts.properties中覆盖struts2默认国际化的编码格式

<constant name="struts.i18n.encoding" value="gbk"></constant>

到此编码应该已经统一为gbk了,看看结果吧

其实最简单的放法就是把数据库和jsp中的编码统一设置为utf-8即可

posted @ 2009-10-19 14:08 雪山飞鹄 阅读(468) | 评论 (0)编辑 收藏

 

今天在写struts2 save的时候报了这么一个异常

java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity

    at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:40)

    at org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:23)

    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)

    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)

从上面的异常信息可以看出是在Hibernate进行save的时候检测到beannull

1)        大致从这几个方面来分析原因:

2)        Hibernate(*.hbm.xml)映射文件是否错误

3)        DAO层代码是否错误

4)        检查Action及视图层jsp页面等

从上面几个逐个检查后得出的结论为第四条

首先看Action中的代码

private Employee employee;

    public Employee getEmployee() {

        returnemployee;

    }

    publicvoid setEmployee(Employee employee) {

        this.employee = employee;

    }

这里employee是我们观察的重点

再看jsp中的代码

<s:form action="saveEmployee.action">

        <s:textfield name="empName" label="empName"></s:textfield>

        <s:textfield name="age" label="age"></s:textfield>

        <s:textfield name="sex" label="sex"></s:textfield>

        <s:textfield name="context" label="context"></s:textfield>

        <s:submit value="注册" theme="simple"></s:submit>

        <s:reset value="取消" theme="simple"></s:reset>

</s:form>

大家注意<s:textfield/>name属性的值

很显然错误发生在此处修改如下即可:

<s:form action="saveEmployee.action">

        <s:textfield name="employee.empName" label="empName"></s:textfield>

        <s:textfield name="employee.age" label="age"></s:textfield>

        <s:textfield name="employee.sex" label="sex"></s:textfield>

        <s:textfield name="employee.context" label="context" value=""></s:textfield>

        <s:submit value="注册" theme="simple"></s:submit>

        <s:reset value="取消" theme="simple"></s:reset>

    </s:form>

由此我们得出的结论是:

jsp页面中一定要保持页面中各个控件的name属性与Action中模型驱动对象的名字一致否则就会报错

posted @ 2009-10-19 11:39 雪山飞鹄 阅读(27931) | 评论 (19)编辑 收藏

仅列出标题
共22页: First 上一页 14 15 16 17 18 19 20 21 22