【问题标题】:Message bundle intermittently not rendering correct消息包间歇性地不正确呈现
【发布时间】:2012-03-27 05:48:42
【问题描述】:

在我的应用程序中,我试图从消息包中获取标签。 然而,我使用变量而不是使用常量键值

<c:forEach var="emailAddress" items="${emailAddresses}">
...
<c:set var="labelKey" value="Contact_Label_${emailAddress.type}"/>
...
<h:outputText value="#{faces_translations[labelKey]}"/>
...
</c:forEach>

大多数情况下,这可以正常工作,但在页面打开时每隔一段时间 加载的一些标签没有正确处理和以下 显示消息:

???Contact_Label_???

看起来 email.type 没有返回值,但是我添加了一些 调试代码通过包含打印出 email.type 的值

${emailAddress.type}

看到返回了一个值。

我尝试的另一件事是在每次设置之前删除该值 再次在循环内使用 .这导致了以下 例外。我确认我已将标记库包含在 WAR 文件中 (jstl-api-1.2.jar 和 jstl-impl-1.2.jar 以及 javax.faces-2.1.7)。

<c:remove> Tag Library supports namespace: http://java.sun.com/jsp/jstl/core,
but no tag was defined for name: remove

这两个问题确实令人费解。该标签大部分时间都有效, 但并非始终如一。标签在包含的库中定义,但找不到。

提前感谢您的任何指点。

【问题讨论】:

标签: java jsp jsf jstl


【解决方案1】:

JSF UI 组件和标签处理程序(如 JSTL)不会同步运行。 JSTL 在要构建 JSF 视图时运行。结果是一个 JSF 组件树没有任何标签处理程序,如 &lt;c:xxx&gt;&lt;f:xxx&gt;。 JSF UI 组件在 JSF 视图需要为 HTTP 响应生成 HTML 时运行。只要您通过在 POST 操作上返回 nullvoid 与同一视图交互(就像您应该使用 @ViewScoped bean 一样),就可以在后续 HTTP 请求中多次重用相同的 JSF 视图。 JSTL 标记在每个单独的 HTTP 请求上运行是不正确的。这很可能是您的问题所在。

如果您希望在重用相同视图的同时保持一致的渲染时行为,请使用 JSF UI 组件。您的构造可以如下替换:

<ui:repeat var="emailAddress" value="#{emailAddresses}">
    ...
    <ui:param name="labelKey" value="Contact_Label_#{emailAddress.type}" />
    ...
    <h:outputText value="#{faces_translations[labelKey]}" />
    ...
</ui:repeat>

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2021-04-19
    • 2012-01-19
    相关资源
    最近更新 更多