Jsf 通过选择复选框启用和禁用组件
我有一个组件,我正在尝试禁用下面的panelGridJsf 通过选择复选框启用和禁用组件,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我有一个组件,我正在尝试禁用下面的panelGrid <h:selectBooleanCheckbox id="checkboxId" value="#{bean.checked}"> <p:ajax update="panelId" event="click"/> </h:selectBooleanCheckbox> <h:panelGrid id="panelId" re
<h:selectBooleanCheckbox id="checkboxId" value="#{bean.checked}">
<p:ajax update="panelId" event="click"/>
</h:selectBooleanCheckbox>
<h:panelGrid id="panelId" rendered="#{!bean.checked}">
<h:outputLabel>some text</h:outputLabel>
<h:outputLabel>#registrationBB.registrationModel.homeAddress.actualAddressMathWithRegistration}</h:outputLabel>
</h:panelGrid>
因此,单击复选框不会产生任何效果。check指示符甚至没有出现在checkbox组件和value bean上:checked没有发送到服务器。
我也试着用。出现检查指示灯,但面板未刷新
如何通过复选框使用update right?下面的示例是我的工作:
<h:form>
<h:selectBooleanCheckbox id="checkboxId" value="#{indexBean.checked}" >
<p:ajax event="change" update="panelId" />
</h:selectBooleanCheckbox>
<h:panelGrid id="panelId" style="border:solid 1px black;" >
<h:outputLabel rendered="#{!indexBean.checked}" >some text</h:outputLabel>
<h:outputText rendered="#{!indexBean.checked}" value="some text 2" />
</h:panelGrid>
</h:form>
我不得不将事件从单击更改为更改,以使复选框正常工作。另一个问题是,如果不渲染,则找不到要更新的id,因此您希望将渲染属性移动到内部的组件,但仍会更新。稍有变化。支持bean字段不必是布尔值。如果您有一个带有字段的支持bean:
private List<SelectItem> myStringList;
private String myString;
然后你可以这样做:
<h:form>
<p:selectOneRadio id="ctlSearchType" value="#{mybean.myString}" layout="grid" columns="3">
<f:selectItems value="#{mybean.myStringList}" />
<p:ajax event="change" update="ctlone,ctltwo"/>
</p:selectOneRadio>
<h:panelGrid id="panelId" style="border:solid 1px black;" >
<p:outputLabel for="ctlone" value="Field one:"/>
<p:inputText value="#{mybean.whatever}" id="ctlone" size="8" maxlength="10" disabled="#{mybean.myString eq 'one'}"/>
<p:outputLabel for="ctltwo" value="Field two:"/>
<p:inputText value="#{mybean.whatevertwo}" id="ctltwo" size="8" maxlength="10" disabled="#{mybean.myString eq 'two'}"/>
</h:panelGrid>
</h:form>
在黑暗中拍摄:试试看。有一些特定的条件不起作用,我相信其中一个条件被包装在一个非PrimeFaces组件中。你有一个h:表单包装所有这些吗?是的,表单是present@BalusC如果我尝试使用event=单击,则两种情况下都不会出现检查指示器您使用的Primefaces版本是什么?这在版本4中不起作用,无论复选框是否被选中,panelGrid都不受影响。@Nab可能是版本3.x。这个问题是在4.0发布前几年提出的。我在5.0中遇到了一个自定义jsf组件的类似问题,我通过将其包装在面板中并更新面板来解决它。可以试试看。@MarkRobinson这是一个问题,另一个问题是如果你不呈现id,找不到要更新的id,因此,您希望使用“SelectItem”将渲染属性移动到内部组件的情况不再常见,因为也支持普通列表,并且selectOneRadio与selectBooleanCheckbox完全不同。
<h:form>
<p:selectOneRadio id="ctlSearchType" value="#{mybean.myString}" layout="grid" columns="3">
<f:selectItems value="#{mybean.myStringList}" />
<p:ajax event="change" update="ctlone,ctltwo"/>
</p:selectOneRadio>
<h:panelGrid id="panelId" style="border:solid 1px black;" >
<p:outputLabel for="ctlone" value="Field one:"/>
<p:inputText value="#{mybean.whatever}" id="ctlone" size="8" maxlength="10" disabled="#{mybean.myString eq 'one'}"/>
<p:outputLabel for="ctltwo" value="Field two:"/>
<p:inputText value="#{mybean.whatevertwo}" id="ctltwo" size="8" maxlength="10" disabled="#{mybean.myString eq 'two'}"/>
</h:panelGrid>
</h:form>