为什么我的 actionErrors 和 fieldErrors 用大括号 [] 显示?

Why are my actionErrors and fieldErrors displayed with braces []?

一旦页面在我的 Struts 2 应用程序中捕获了错误,错误就会从我的资源包中正确显示,但是它们总是显示在大括号 [].

例如:

[first name must not be empty]

这些通过标签显示:

<s:actionerror />

<s:iterator value="fieldErrors">
   <s:property value="value" />
</s:iterator>

这些来自 Action-validation.xml 并通过验证方法 addFieldError() 设置

这是否与我的主题设置为 simple 有关?我在文档中或其他帖子中看不到任何内容。

如果没有默认 xhtml 主题,它会在打印时呈现对象 toString(),即用括号格式化数组。

Render field errors if they exists the specific layout of the rendering depends on the theme itself. Empty (null or blank string) errors will not be printed. The field error strings will be html escaped by default.


显示错误的代码应该如下所示

<s:if test="hasFieldErrors()">
   <div class="errors">
      <s:fielderror />
   </div>
</s:if>

为什么

不,这与主题无关。看看 getFieldErrors 方法。它 returns 映射其中值是字符串列表。

public Map<String, List<String>> getFieldErrors() {
    return validationAware.getFieldErrors();
}

您的代码遍历 map 并且 value 是一个列表。 List as string 将用括号显示。

如何

如果您只需要错误消息的值而不需要密钥,那么您可以改用 addActionError 方法并遍历 actionErrors.

如果你想迭代 fieldErrors 那么你可以这样做。

<s:iterator value="fieldErrors">
    <s:property value="key"/>:
    <s:iterator value="value">
        <s:property/>
    </s:iterator>
</s:iterator>

当然还有显示errors/messages的标签,见Non-Form UI Tags