我有JSF的问题.任何人都可以说为什么这不起作用?
<h:selectOneListBox id="lang" size="5" value="#{MbInstitution.node.lang}" valuechangelistener="#{MbInstitution.changeLanguage}" rendered="#{MbInstitution.view}" > <a4j:support event="onchange" reRender="shortDesc,fullDesc"/> <f:selectItems value="#{MbInstitution.languagesByInstitute}"/> </h:selectOneListBox> <h:selectOneListBox id="lang" size="5" disabled="#{!MbInstitution.managingNew}" value="#{MbInstitution.node.lang}" rendered="#{!MbInstitution.view}" > <f:selectItems value="#{MbInstitution.availableLanguages}"/> </h:selectOneListBox>
它说:“组件instForm的重复Id:lang”
我知道我有2个具有相同Id的元素,但只有当另一个不是时,才会渲染一个元素.所以,我认为这不是一个问题.实际上它根本不是一个大问题,因为我不需要这个id,但如果我需要那么我该怎么办?
解决方法
您的问题是这两个组件是此页面的JSF组件树的一部分.即使它们无法同时显示,它们也会共享相同的ID,这是JSF不允许的.
第一种解决方案:定义两个不同的ID
第二种解决方案:正如Wayne Young所解释的,您可以使用NamingContainer,它将使用NamingContainer的ID为其ID添加前缀.
第三种解决方案:仅使用一个< h:selectOneListBox />然后在Java代码中做出改变.
<h:selectOneListBox id="lang" size="5" disabled="#{!MbInstitution.managingNew}" value="#{MbInstitution.node.lang}" valuechangelistener="#{MbInstitution.changeLanguage}"> <a4j:support event="onchange" reRender="shortDesc,fullDesc" rendered="#{MbInstitution.view}"/> <f:selectItems value="#{MbInstitution.languages}"/> </h:selectOneListBox>
Java代码:
public List<SelectItem> getLanguage() { if (isView()) { return getLanguagesByInstitute(); } else { return getAvailableLanguages(); } } public void changeLanguage(ValueChangeEvent evt) { if (!isView()) { return; } ... }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。