2019独角兽企业重金招聘Python工程师标准>>>
环境:eclipse-jee-galileo-SR2-win32+apache-tomcat-6.0.18+struts-2.3.14
最近学习struts2框架,就在此随笔谢谢,如有不足,请各位赐教。
1.工程出现下面错误:
2013-6-2 20:28:15 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: No configuration found for the specified action: 'loginRegister' in namespace: '/'. Form action defaulting to 'action' attribute's literal value.
首先检查jsp中form标签里action和struts.xml里配置的action名是否相同。如果名相同的话,确认是否在相应的namespace下。如果不在同一个域名下,就在form标签里加上namespace="/xx"(xx对应struts.xml里定义的namespace值),如未指定,struts2会默认从根命名空间"/" 搜索action。
需要注意的一点是出现这样的问题,有可能是因为你在
2.
3.使用
org.apache.jasper.JasperException: tag 'radio', field 'list', name 'usex': The requested list key '#{0:'保密',1:'男',2:'女'}' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
这个问题纠结了很长时间,这样写jsp不需要冲后台得到集合,怎么还会报出这个message呢?查了各种资料都解决不了,其实还是细节问题,我把别人的代码拷来执行就没有问题,怎么运行这个就有问题了,仔细检查下来,发现有一个全角的冒号在里面...
另外如果下面这样使用标签,也会出现这样的错误:
那是因为没有走action(validator没有通过,返回界面),或者走了action却没有对这个集合进行初期化,直接解决的方法是初期 化list的工作放到prepare拦截器中,因为prepare是在validate拦截器之前执行,即实现prepareble接口。
public class LoginRegister extends ActionSupport implements Preparable {
...
@Override
public void prepare() throws Exception {
List sexList = new ArrayList();
...
ActionContext.getContext().put("sexList", sexList);
}
需要说明的是标签里的属性listKey,listValue是dto里的两个属性,list属性对应的是这个dto的集合。如果想回显选中的值,只需将value属性的值设置成与name值一样就可以了,但是这样在画面初期化的时候就不会有值了,如果想在初期化选中某个值的话,只需要将value属性的的值设置成对应的值就行了(value="3"),但这样又不能回显被选中的值了,如何两者兼顾了...
4.在struts2进行自定义的类型转换时,将string装换成int类型会出现下面的错误:
警告: Error setting expression 'uage' with value '[Ljava.lang.String;@4fe91e'
ognl.MethodFailedException: Method "setUage" failed for object action.LoginRegister@87e704 [java.lang.NoSuchMethodException: action.LoginRegister.setUage([Ljava.lang.String;)]
如果将int换成Integer就没有问题了,不知是什么原因造成这样的问题。
5.另外还遇到一些,还没有解决,路过的大神可要帮帮呀...
跑validator的时候,出现下面的问题:
5.1出现下面的警告。
2013-6-2 21:26:02 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
警告: Got result of null when trying to get Boolean.
5.2LoginRegister-validation.xml中的正规表达式没有起作用,如下:
${getText("name.rule")}
整个 LoginRegister-validation.xml文件如下:
${getText("name.rule")}
${getText("password.required")}
${getText("password.rule")}
${getText("repassword.required")}
6
20
${getText("repassword.rule")}
${getText("repassword.equal")}
0
120
${getText("age.rule")}
${getText("email.rule")}
资源文件:messageResource_zh_CN.properties
age.rule=年龄必须在${min}至${max}之间
birth.rule=出生日期必须在1900-01-01至2012-01-01之间
email.rule=请输入有效的电子邮箱格式
password.required=必须输入密码
password.rule=密码长度必须在6至20之间
repassword.required=必须输入确认密码
repassword.equal=密码与确认密码必须一致
repassword.rule=确认密码格式必须在6至20之间
name.required=必须输入用户名
name.rule=用户名的长度必须在6至20之间
phone.rule=电话号码为13位
参考资料:
http://80eye.diandian.com/post/2010-05-25/17206015
http://bbs.csdn.net/topics/110118066
http://www.blogjava.net/landor2004/archive/2009/04/11/265016.html
http://blog.csdn.net/greencacti/article/details/7170086
http://wenku.baidu.com/view/e65397acd1f34693daef3ec6.html
讨论帖:
http://www.oschina.net/question/1050450_113121
感谢热心的前辈!!本文如有不正,请指出。
以上。