这几天用struts2标签时出现一些比较奇怪的问题,关键代码如下(这里只截取表单的一部分,其余部分也是同样效果):${photoType.name}
<s:textfield id="name" name="photoType.name" title="必填" cssClass="text" 
   value="%{#request.photoTypeDetail.name}" cssStyle="width: 154px"/>
<span class="red">
     <s:fielderror><s:param>photoType.name</s:param></s:fielderror>
</span>以上代码可以正常运行,但是存在一个怪异!
在功能设计上,我在上述文本框中输入“1”,然后会返回验证框架的错误信息“相册名必须大于4个字符”。
然而实际执行情况是,错误信息返回了,但是文本框中没有“1”,大家都知道struts2的textfield标签是可以保存填入的信息的,因为在Action处我有相关属性的set和get方法。
然而我在断点调试的时候发现,Action的this.get方法可以获取到该文本框的值“1”,于是我使用EL标签${photoType.name},成功获取到了“1”的值。这个情况不仅在textfield标签存在,其他任何表单标签都存在,以上标签已经用于多个模块(语法上不会出现错误),却偏偏只有这个模块出现问题,请问哪位也碰过这个问题吗?
务必指教,我已经找了2天了都没找到错误原因。

解决方案 »

  1.   

    晕,刚想了下把上述代码的value="%{#request.photoTypeDetail.name}" 删掉,居然可以接收了!
    但问题是,我另一个模块的站点名字编辑代码如下
    <s:textfield id="sitetitle" name="websiteConfig.sitetitle" value="%{#request.websiteConfig.sitetitle}" cssClass="text" cssStyle="width: 154px" />
    例如传过来的值是“网易123”,那么在文本框中自然显示网易123;
    然后在文本框中输入值“网易123网易123网易123网易123”并提交,此时提示错误信息“不能超过10个字符”,返回文本框的值也是“网易123网易123网易123网易123”而非“网易123“。对比这两个文本框的代码,可以发现完全一致,为什么结果完全不同,真是头大啊!