Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 逻辑:Struts1中的messagesPresent标记未在操作消息中的多个错误中循环_Validation_Jsp_Struts_Struts 1 - Fatal编程技术网

Validation 逻辑:Struts1中的messagesPresent标记未在操作消息中的多个错误中循环

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

我在一个bean中有一个字段未通过2次验证,因为使用以下命令将2条消息插入
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>)