struts2属性Struts2中属性接收参数中文问题和简单数据验证

PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

    :如果表单提交数据中有中文时,尽量应用post方式。

    需要在Struts.xml配置文件中参加一个常量配置,如下:

    

<struts>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.i18n.encoding" value="GBK" /><!-- internationalization -->
    <package name="user" extends="struts-default" namespace="/user">
        <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
            <result>/user_add_success.jsp</result>
        </action>
    </package>
</struts>

    但是,在Struts2 2.7之前,这个配置无效,需要其它方法设置。如下:

    手动在web.xml中在Struts过滤器之前配置一个过滤器用于解决中文的问题。

    二:

    应用addFieldError方法和s:fieldError标签简单处置数据校验

    场景:对一个用户名进行验证,如果用户名不合法,则表现给客户端查看信息。

    

URL请求地址:

http://localhost:8080/Struts2_1100_SimpleDataValiation/user/user!add?name=a

    分析:访问的Struts2配置,namespace=”/user” action的name=”user” Action所执行的方法method=”add”并且传入了一个参数name=a.如下:

<package name="user" extends="struts-default" namespace="/user">
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
            <result>/user_add_success.jsp</result>
            <result name="error">/user_add_error.jsp</result>
        </action>
</package>

    根据配置文件可以得悉action所对应的类为com.bjsxt.struts2.user.action.UserAction,并且拥有两个结果集(success和error).代码如下:

    每日一道理
书,各种各样的书。书,寄托着人类热切的希望;书,蕴含着人类丰富的感悟。提起书,会有说不完的话语……
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
	private String name;
	public String add() {
		if(name == null || !name.equals("admin")) {
			//addFieldError 添加错误信息,可以在客户端访问到。
			this.addFieldError("name", "name is error");
			this.addFieldError("name", "name is too long");
			return ERROR;
		} 
		return SUCCESS;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

    根据Action类代码,可以看到Action是利用Action的成员属性(name)来接受参数值,并且应用this.addFieldError()方法添加错误信息,以便前台可以访问到。

this.addFieldError(name, errorMessage);

    注:此方法是应用继承了ActionSupport父类的

  name:可所以傻的属性名称,但一般建议应用哪个成员属性出题了,就用那个。以后是因为name没有通过验证,所以应用name

  errorMessage:添加的信息

 

    在客户端获得这些信息,如下:

<body>
	User Add Error!
	<s:fielderror fieldName="name" theme="simple"/>
	<br />
	<s:property value="errors.name"/>
	<s:debug></s:debug>
</body>

    注:应用<s:fielderror>标题,需要应用<%@taglib>命令引用Struts2的标签库如下:

<%@taglib uri="/struts-tags" prefix="s" %>

    1、<s:fielderror>标签:获得应用addFieldError()方法添加的信息。

               FiledName:指定信息的名称。

               Theme: 指定表现的主题。

   注:应用此标签获得的错误信息,Struts强制添加了css的修饰。生成的HTML代码如下(不长用):

<ul class="errorMessage">
				<li><span>name is error</span></li>
				<li><span>name is too long</span></li>
	</ul>
Class=”errorMessage”是Struts2已经设置好的一个css了。这个方式不方便我们自定义样式。

    2、<s:debug></s:debug>:这是标签的写方式,会在页面上产生一个链接,点击后表现如下(Struts2生成的一些信息):

    struts2和属性

    3、<s:property>标签:获得值堆栈属性所对应的值。

<s:property value="errors.name"/>

    注:value:指定值堆栈的属性名及数据下标等。

    例如:value=”a” 获得Action类的成员属性a的值

       Value=”errors” 获得errors属性的对象Map值

       Value=”errors.name”获得errors属性的对象Map的key为name的value

       Value=”errors.name[0] 获得errors属性的对象Map的key为name的value的第一个元素的值。

    注:如果获得Action Context中的Key值,需要在前面加#(井号)

    例如:<s:property value=”#request”/>

    

文章结束给大家分享下程序员的一些笑话语录: 马云喜欢把自己包装成教主,张朝阳喜欢把自己包装成明星,李彦宏喜欢把自己包装成的很知性,丁磊喜欢把自己包装的有创意,李开复总摆出一副叫兽的样子。看来的。其实我想说,缺啥补啥,人之常情。

--------------------------------- 原创文章 By
struts2和属性
---------------------------------

posted @ 2013-06-22 23:23  xinyuyuanm  阅读(301)  评论(0编辑  收藏  举报