0

我对单选按钮有疑问。我在字段集中有 2 组单选按钮和一个命令按钮。基于单选按钮的选择,将通过 ajax 调用显示受尊重的值。但问题总是第一个按钮在命令按钮操作中得到考虑,这就是为什么总是显示第一个值,但是选择了第二个单选按钮。这是我的代码

//test.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;
    }
4

1 回答 1

1

您不需要在f:setPropertyActionListener这里将选定的值放入您的支持 bean。只需向您的标签添加一个execute属性并删除:f:ajaximmediate=true

<h:commandButton ...>
   <f:ajax render=":parentformid:demandrequestpanelgrpid" execute="@form" /> 
</h:commandButton>

您也可以只给出要执行的组件的 id 而不是整个表单:

<h:commandButton ...>
   <f:ajax render=":parentformid:demandrequestpanelgrpid" execute="groupbyid" /> 
</h:commandButton>

还要确保selectedRadioButton在您的支持 bean 中正确初始化了 bean,并且该 bean 至少在@ViewScoped.

更新:如果删除,f:setPropertyActionListenerselectedRadioButtonParam不会设置。然后你需要检查selectedRadioButton你的动作方法。

于 2012-05-22T07:04:36.817 回答