我有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>
Run Code Online (Sandbox Code Playgroud)
它说:"组件instForm:lang的重复Id"我知道我有2个具有相同Id的元素,但只有当另一个没有时才会渲染一个.所以,我认为这不是一个问题.实际上它根本不是一个大问题,因为我不需要这个id,但如果我需要那么我该怎么办?
Rom*_*las 11
您的问题是这两个组件是此页面的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>
Run Code Online (Sandbox Code Playgroud)
Java代码:
public List<SelectItem> getLanguage() {
if (isView()) {
return getLanguagesByInstitute();
} else {
return getAvailableLanguages();
}
}
public void changeLanguage(ValueChangeEvent evt) {
if (!isView()) {
return;
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5059 次 |
| 最近记录: |