解决方案 »
- tomcat启动时,怎么取得工程URL地址
- 汇编实现从 一个文件读信息,并将信息写入另一文件 。问题程序
- 求助!Hibernate查询在哪里关闭session好
- weblogic是用来干什么的?:)
- 那有比较好的web虚拟主机,最好在北京
- 小弟就要到北京尖峰计算机系统有限公司,面试!
- 初学者的问题:我只是想学习一下struts html标签库,必须写ActionForm与Action吗?
- 在JB中怎么配置不了com.microsoft.jbdc.sqlserver这个Driver
- 怎样在数据表中得到Insert后的自动增量字段的值?
- 谁知道怎么把经度纬度转成手机屏幕的坐标~~~~~~~~~~~~
- jdbc查询需要手动提交事务吗?
- 就一个js弹出层的效果,很急【求大家快来帮忙~非常感谢】
定义了UserConverter extends StrutsTypeConverter
自定义转换器而且,我输入name,pass 是可以成功转换为User类的
另外,conversionError 拦截器 也正常工作了
当输入非法时conversionError 捕获到了 异常
并返回input视图
我的input页面中 <s:fielderror/> 也成功的输出我自定义的xwork.default.invalid.fieldvalue
表面上 这一切,Struts2.1都没有出错
问题是,我的控制台 却报了异常
而且,注意这不是 一个通常的异常,而是Struts的日志系统 打印出来的
日志的级别 warn 警告
并不是 严重我现在的疑问是,既然,前面Struts按照 流程 没有出错
我不想控制台 打印这些 东西!
struts2-core-2.0.11.1.jar
xwork-2.0.4.jar其它未做任何改动不报任何错误
Struts只是在 控制台 打印了两行 转换器的 初始化 信息这个是个BUG吗????
网络传输的 还是 那些字符串比如 “2009-01-01”原来 我们 服务器端 自己写
try{
new Date(“2009-01-01”)
return 成功
}catch{
return 失败
}如果使用 Struts框架
这些代码 就可以有框架提供,而不用自己写啊!就算是验证
js的客户端验证 肯定会做的
但服务器端 也肯定不能少啊!你说 是吧??
你在页面上应该是 :
user:<input name="user" >
pass:<input name="user" >
这样, 对于 Struts2 就会去调用 setUser(String[] string) [Ljava.lang.String 是数组类型]这是 Servlet 容器的解析工作, 其会将页面上所有相同 name 属性的字段封装成一个数组传进 Servlet 中
(request.getParameters()) ;
不知道你的 Action 中是如何写的, 如果自定义的类型转换器已经正常写好了 convertFromString 方法的话, 那么在 Action 应该是
private User userObj;
public void setUserObj(User user){...} 这样的形式;"另外,假如我action 中有一个属性是 int 类型
当我提交是,不输入 (也就是null)
也会报这个错误 "
对于这个, 是 String <---> Integer 的转换, 这个 Struts2 会自动完成(内建转换器), 如果正常的话
(是程序正常运行,不是出现异常), 你在这个 <input > 不填写东西话, 其回显会是 '0' , 不会是空字符串;
"按道理说
Struts2 的 conversionError 拦截器
已经 处理 异常了,而且页面也成功跳转,错误信息也 正常显示了
怎么控制台出现如此之多的异常呢??? "
自己检查一下你的 conversionError 是不是在 param 这个拦截器的后面? 是的话就如此, 因为对于 Action 中的值的填充是 param 拦截器做的, 而 Struts2 是按照你配置的拦截器的顺序来做这些事情的;
对于 Struts2 的 js 验证, 这个是需要你配置了 Struts2 提供的 Validation 框架其才会使用, 并且可以在
<s:form validate=false > 来关闭 JS 验证, 这个并不会关闭服务器端的验证,这些 JS 文件是
struts2-core-xxx.template.xhtml.validation.js ,对于 Struts2 中的这个路径是可以使用 /struts 来进行
静态访问的
private User user;
public void setUser(User user){...}
public User getUser(){...}页面中
Struts2类型转换
<s:form action="login" namespace="/md05">
<s:fielderror/>
用户信息的用户名和密码以英文的逗号隔开 请输入用户信息:
<s:textfield name="user" label="请输入用户信息"></s:textfield>
<s:submit value="登录"></s:submit>
</s:form>页面中只要输入 name,pass 就可以转换为一个Name=name;Password=pass的User对象 自定义转换器
public class UserConverter extends StrutsTypeConverter /*extends DefaultTypeConverter*/ { @Override
public Object convertFromString(Map context, String[] values, Class toClass) {
User user = new User();
String[] userValues = values[0].split(",");
user.setName(userValues[0]);
user.setPass(userValues[1]);
return user;
} @Override
public String convertToString(Map context, Object o) {
User user = (User) o;
return "< " + user.getName() + " , " + user.getPass() + " >";
}
}配置文件,LoginAction-conversion.properties与Action类在用一个包下
user=md05.UserConverter
指定 LoginAction中 的user属性 使用md05.UserConverter自定义转换器 转换Struts2.1的配置文件
<action name="login" class="md05.LoginAction">
<result>welcome.jsp</result>
<result name="input">error.jsp</result>
</action>
关于 int和Integer的问题页面<input>中不输入 提交如果Action中 使用int 那么会得到空 页面会成功跳转,
但是控制台 会打印异常 说找不到 setInt(String)方法如果Action中使用 Integer 页面也不会有问题
控制台 不打印 任何 异常包括一楼的问题
如果我换成 Struts2.0的jar包
struts2-core-2.0.11.1.jar
xwork-2.0.4.jar 其它未做任何改动 不报任何错误
Struts只是在 控制台 打印了两行 转换器的 初始化 信息
比如,页面中<input name=user.name>
<input name=user.pass>
这样就避免使用类型转换。但是,
第一,我目前正在学习 Struts2.1 (所以最好各个方法的学习一下);
第二,自定义类型转换,其实很少出现在注册,登陆等方面。
说实在这个功能,实际使用时,很少用到的。但是,当向集合中 一次提交 多个对象时,
自定义类型转换就非常有用了,代码也变得整洁和清晰。
从 ParametersInterceptor 向里深入, 注释越来越少,很多方法都不知道到底干了什么 - -|| 无语了;如果想继续深入解决这个问题也只有看他的源代码了, 如果你解决了不要忘记告诉我他里面是何时何地如何
反射调用的 嘿嘿
源码看起来太晕了
拦截器部分 大多是 代理目前 我只能认为 是BUG
原来 xwork2.1.2 的jar包就有类似的问题
当时的是 String 转 int 报错 转 Integer 不报错这一次的是 Struts 不报错,xwork 调 ognl 报错。
一开始 我以为是 某个 Struts参数设置问题
因为从 错误信息 上看 是Struts的日志系统打印的
warn 级别的我想 应该有个参数 来设置 日志的级别
但是 找了半天 也没有找到!虽然 控制台 有打印 错误,但是 程序和页面都没有中断,也没有什么错误,都是正常流程
所以 也不影响 使用。
唯一担心的是,如果每次 自定义类型转换 都有错误信息
那如果 真的部署到服务器的话,服务器的日志 将有大量的错误信息 被保存到日志中
这样 既不好看,也影响其他错误的排查!
楼主学习了.
呵呵,如果你觉得是Bug,可以向开发人员提交.
https://issues.apache.org/struts/browse/WW
这是Bug跟踪...
目前 我只能认为 是BUG
原来 xwork2.1.2 的jar包就有类似的问题
当时的是 String 转 int 报错 转 Integer 不报错
userValues[0];
userValues[1];
就会有异常吧,这样就不能return user;了,那么action就不能注入user,就是说整个注入过程没有完成任务——setUser()自然就是没有调用,这样系统说找不到,也是对的。个人(菜鸟)理解,还请高手斧正!
呵呵, 问题适可而止吧,没必要钻了, 这个问题可以先记下, 说不准以后对 Struts2 更熟悉了,
突然在源码中找到答案了 ~
对 你分析的是正确的。
但你要考虑 conversionError 拦截器 会捕获异常的
当配置了 exception 的result 视图后。
就可以 在发生异常 时 跳转到 exception 的result 中我现在 页面也跳转了,说明conversionError 已经捕获了异常
但是 控制台却 打印错误信息,这个很烦啊!!以后 一次错误输入,我服务器 日志就一堆的错误。不好看,也不利于 其它错误的排查!!!