Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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
Java 消息包间歇性呈现不正确_Java_Jsp_Jsf_Jstl - Fatal编程技术网

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组件。您的构造可以按如下方式替换:


...
...
...
另见:

提供了一些信息。也许`${labelKey}可以工作。你真的不应该混合使用JSTL/JSF2.0。使用ui:repeat怎么样?
${emailAddress.type}
<c:remove> Tag Library supports namespace: http://java.sun.com/jsp/jstl/core,
but no tag was defined for name: remove