Validation 逻辑:Struts1中的messagesPresent标记未在操作消息中的多个错误中循环
我在一个bean中有一个字段未通过2次验证,因为使用以下命令将2条消息插入Validation 逻辑:Struts1中的messagesPresent标记未在操作消息中的多个错误中循环,validation,jsp,struts,struts-1,Validation,Jsp,Struts,Struts 1,我在一个bean中有一个字段未通过2次验证,因为使用以下命令将2条消息插入ActionMessages: validationErrors.add(“field1”,新操作消息(“电话号码大于10位数”,false)); 添加(“field1”,新操作消息(“电话号码包含无效字符”,false)) 尽管我在ActionMessages对象中看到了错误(通过在调试器中设置断点),但只有第一个错误显示在我的jsp中,我有: <logic:messagesPresent message="tru
ActionMessages
:
validationErrors.add(“field1”,新操作消息(“电话号码大于10位数”,false));
添加(“field1”,新操作消息(“电话号码包含无效字符”,false))代码>
尽管我在ActionMessages
对象中看到了错误(通过在调试器中设置断点),但只有第一个错误显示在我的jsp中,我有:
<logic:messagesPresent message="true">
<html:messages id="message" property="field1" message="true">
<logic:present name="message">
<c:out value="${message}"/>
</logic:present>
</html:messages>
</logic:messagesPresent>
当html:messages应该在属性为“field1”的所有消息中循环时,为什么只显示第一条消息?Struts标记检查消息是否存在于当前请求中
消息可在请求中的键Globals.MESSAGE\u键下找到。如果使用属性消息
,则仅检查消息
默认情况下,标记将检索它将访问的请求范围bean
从Globals.ERROR\u KEY
常量字符串迭代,但如果
属性设置为true
将检索请求范围bean
从Globals.MESSAGE\u键
常量字符串。如果此设置为
true
,将忽略分配给name属性的任何值
如果指定的属性message
为true
,则标记用于显示消息
现在您已经使用了一个属性
属性来过滤给定属性的消息
应显示其消息的属性的名称。如果不是
指定后,将显示所有消息(不考虑属性
)
如果只有一条带有field1
属性的消息,则只会显示一条消息
看这里,如何使用操作消息对象
ActionMessages messages = new ActionMessages();
messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.common.field1.required");
saveMessages(request, messages); // storing messages as request attributes
属性文件
error.common.field1.required = Field1 is required.
并显示信息
<logic:messagesPresent message="true">
<html:messages id="message" message="true">
<bean:write name="message"/><br/>
</html:messages>
</logic:messagesPresent>
检索消息的步骤
<logic:messagesPresent message="true">
<html:messages id="message" property="field1" message="true">
<bean:write name="message"/><br/>
</html:messages>
</logic:messagesPresent>
我最终发现了我的问题,这与我如何创建新的ActionMessage有关
使用时:
public ActionMessage(<error message>, false)
public ActionMessage(,false)
虽然它允许您通过将
标记与
或
一起使用来显示文字值,但它不会对给定属性的多条消息进行迭代,原因我不知道
我测试并发现,如果我使用资源包并使用标准创建ActionMessage:
public ActionMessage(<key in resource bundle>)
public ActionMessage()
我能够为单个属性显示多条消息
不幸的是,因为我使用的是hibernate validator,所以我不想使用资源包和struts来替换这些值(宁愿让hibernate validator注释替换这些值),而且现在可能一次只显示一条消息。,在阅读了你的回复后,我重新阅读了我原来的问题,并将其整理得更清楚。我认为区别在于我没有为这些消息使用资源包。
public ActionMessage(<key in resource bundle>)