我对单选按钮有问题。 我在一个字段集中有 2 组单选按钮和一个命令按钮。根据单选按钮的选择,将通过 ajax 调用显示受尊重的值。但问题始终是第一个按钮在命令按钮操作中得到考虑,这就是为什么总是显示第一个值,但是第二个单选按钮被选中。这是我的代码
测试.xhtml
<h:panelGroup id="demandDashBoardPanelGroupID">
<fieldset>
<legend style="font-family:Arial;font-size: 12px;">Demand Dashboard</legend>
<table>
<tr>
<td>
<h:selectOneRadio immediate="true" id="groupbyid" value="#{demandManagedBean.selectedRadioButton}" styleClass="labelstyle">
<f:selectItem itemLabel="Group By Creation Date Time" itemValue="1" />
<f:selectItem itemLabel="Group By Location" itemValue="2" />
</h:selectOneRadio>
</td>
<td>
<h:commandButton id="fetchbuttonID" value="Fetch"
style="font-size:13px;width:60px;height:25px;" action="#{demandManagedBean.displayDemandRequestsTable}">
<f:setPropertyActionListener target="#{demandManagedBean.selectedRadioButtonParam}" value="#{demandManagedBean.selectedRadioButton}"/>
<f:ajax render=":parentformid:demandrequestpanelgrpid" immediate="true"/>
</h:commandButton>
</td>
</tr>
</table>
</fieldset>
</h:panelGroup>
<h:panelGroup id="demandrequestpanelgrpid" rendered="#{demandManagedBean.renderedFieldSet}">
<fieldset id="demandrequestfieldsetid">
<legend style="font-family:Arial;font-size: 12px;">Demand Requests</legend>
<h:outputText rendered="#{demandManagedBean.renderCreationdateDmdtable}" value="first table"/>
<h:outputText rendered="#{demandManagedBean.renderDmdLocationTable}" value="second table"/>
</fieldset>
</h:panelGroup>
支持bean操作
public void displayDemandRequestsTable(){
if(selectedRadioButtonParam!= null && selectedRadioButtonParam.endsWith("1")){
renderCreationdateDmdtable = true;
renderDmdLocationTable = false;
}else if(selectedRadioButtonParam!= null && selectedRadioButtonParam.endsWith("2")){
renderCreationdateDmdtable = false;
renderDmdLocationTable = true;
}
renderedFieldSet = true;
}
您不需要此处的f:setPropertyActionListener
将所选值获取到您的后备 Bean 中。只需在f:ajax
标签中添加一个execute
属性并删除immediate=true
:
<h:commandButton ...>
<f:ajax render=":parentformid:demandrequestpanelgrpid" execute="@form" />
</h:commandButton>
您也可以只给出要执行的组件的 id,而不是整个表单:
<h:commandButton ...>
<f:ajax render=":parentformid:demandrequestpanelgrpid" execute="groupbyid" />
</h:commandButton>
还要确保在支持Bean中正确初始化了selectedRadioButton
,并且Bean至少处于@ViewScoped
中。
更新:如果删除f:setPropertyActionListener
则不会设置selectedRadioButtonParam
。然后,您需要改为在操作方法中检查selectedRadioButton
。