单选按钮选定值未反映在命令按钮 ajax 调用中



我对单选按钮有问题。 我在一个字段集中有 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