我有一个网格组,在更改selectOneMenu的值时应该渲染。我已将valueChangeListener附加到selectOneMenu并且它成功访问了分配给它的函数,但html组件不会重新呈现。无论如何,标志决定了渲染的奇怪之处。
<h:selectOneMenu value="#{channelsAdmin.profileID}" id="profileDrp" valueChangeListener="#{channelsAdmin.setProfileInit}">
<f:selectItems value="#{channelsAdmin.profiles}" var="Profile"
itemLabel="#{Profile.profileName}"
itemValue="#{Profile.profileId}" />
<f:ajax execute="@this" immediate="true" render="pnl"></f:ajax>
</h:selectOneMenu>
<h:panelGroup id="pnl" rendered="#{channelsAdmin.ccpAuthPanelFlage}">
<h:inputText id="sest" value="hew">
</h:inputText>
</h:panelGroup>
豆:
public void setProfileInit(ValueChangeEvent e) {
ccpAuthPanelFlage=true;
ccpPurchPanelFlage=true;
}
答案 0 :(得分:2)
<f:ajax render="pnl">
大致如下:
id="pnl"
的更新元素。id="pnl"
从HTML文档中获取document.getElementById()
的元素。在您的特定情况下,第2步失败,因为HTML文档中没有此类元素。它在HTML文档中不存在,因为它从未在第一时间呈现过。
您需要确保<f:ajax render="...">
引用始终呈现的元素,以便JavaScript可以document.getElementById()
找到它以替换其内容。
<h:selectOneMenu value="#{channelsAdmin.profileID}" id="profileDrp" valueChangeListener="#{channelsAdmin.setProfileInit}">
<f:selectItems value="#{channelsAdmin.profiles}" var="Profile"
itemLabel="#{Profile.profileName}"
itemValue="#{Profile.profileId}" />
<f:ajax execute="@this" immediate="true" render="pnl"></f:ajax>
</h:selectOneMenu>
<h:panelGroup id="pnl">
<h:panelGroup rendered="#{channelsAdmin.ccpAuthPanelFlage}">
<h:inputText id="sest" value="hew">
</h:inputText>
</h:panelGroup>
</h:panelGroup>