Java 消息包间歇性呈现不正确
在我的应用程序中,我试图从消息包中获取标签。 然而,我使用的不是常量键值,而是变量Java 消息包间歇性呈现不正确,java,jsp,jsf,jstl,Java,Jsp,Jsf,Jstl,在我的应用程序中,我试图从消息包中获取标签。 然而,我使用的不是常量键值,而是变量 <c:forEach var="emailAddress" items="${emailAddresses}"> ... <c:set var="labelKey" value="Contact_Label_${emailAddress.type}"/> ... <h:outputText value="#{faces_translations[labelKey]}"/> ..
<c:forEach var="emailAddress" items="${emailAddresses}">
...
<c:set var="labelKey" value="Contact_Label_${emailAddress.type}"/>
...
<h:outputText value="#{faces_translations[labelKey]}"/>
...
</c:forEach>
看起来email.type没有返回值,但是我添加了一些
调试代码以打印出email.type的值,方法是包括
${emailAddress.type}
并看到返回了一个值
我尝试的另一件事是每次设置之前都删除该值
再次在循环内部使用。这导致了以下结果:
例外。我确认WAR文件中包含了标记库
(jstl-api-1.2.jar和jstl-impl-1.2.jar以及javax.faces-2.1.7)
标记库支持命名空间:http://java.sun.com/jsp/jstl/core,
但是没有为name:remove定义标记
这两个问题都令人困惑。标签大部分时间都有效,
但并非始终如一。标记已在包含的库中定义,但找不到
提前感谢您提供的所有指针。JSF UI组件和标记处理程序(如JSTL)不会同步运行。JSTL在构建JSF视图时运行。结果是JSF组件树没有任何标记处理程序,如
和
。JSF UI组件在JSF视图需要为HTTP响应生成HTML时运行。只要您在POST操作中返回null
或void
(就像您应该使用@ViewScoped
bean一样),就可以在后续HTTP请求中多次重用相同的JSF视图。JSTL标记不是在每个HTTP请求上都运行的。在你的情况下,这很可能是出问题的地方
如果您希望在重用同一视图的同时保持一致的呈现时间行为,那么最好使用JSF UI组件。您的构造可以按如下方式替换:
...
...
...
另见:
${emailAddress.type}
<c:remove> Tag Library supports namespace: http://java.sun.com/jsp/jstl/core,
but no tag was defined for name: remove