1

我有 2 组面板组。一个面板组包含一个字段集,里面有两个单选按钮和一个命令按钮。基于单选按钮的选择,尊重的值将通过ajax调用显示在另一个面板组中。但问题是在单击命令按钮时选择单选按钮后,第一次加载页面时,其他面板组根本不呈现。当我刷新一切正常。即使在命令操作中设置了该值,我也无法弄清楚为什么 renderPanelGroup 值未设置为 true。这是我的代码。

测试.xhtml

    <h:form id="parentformid">
 <h:panelGroup id="demandDashBoardPanelGroupID">
    <fieldset> 
    <legend>Demand Dashboard</legend>

     <table>
        <tr>
        <td> 
            <h:selectOneRadio id="groupbyid" value="#{demandManagedBean.selectedRadioButton}" >  
                    <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" 
                     action="#{demandManagedBean.displayDemandRequestsTable}">
                          <f:ajax render=":parentformid:demandrequestpanelgrpid"execute="@form" /> 
            </h:commandButton>
        </td>
        </tr>
        </table>

     </fieldset>

     </h:panelGroup>
   //For checking demandManagedBean.renderedPanelGroup value. it is giving always false.Thats why panel group is not getting rendered.
   <h:outputText value="#{demandManagedBean.renderedPanelGroup}" />

    <h:panelGroup id="demandrequestpanelgrpid" rendered="#{demandManagedBean.renderedPanelGroup}"> 

     <fieldset id="demandrequestfieldsetid"> 

     <legend >Demand Requests</legend>

            <h:outputText rendered="#{demandManagedBean.renderFirstTable}" value="first table"/>

            <h:outputText rendered="#{demandManagedBean.renderSecondTable}" value="second table"/>

     </fieldset> 

   </h:panelGroup>

//支持bean cmd动作

private String selectedRadioButton ="1";
private boolean renderFirstTable ;
private boolean renderSecondTable;
private boolean renderedPanelGroup ;

//getter and setter methods

public void displayDemandRequestsTable(){


        if(selectedRadioButton!= null && selectedRadioButton.endsWith("1")){

            renderFirstTable = true;
            renderSecondTable= false;

        }else if(selectedRadioButton!= null && selectedRadioButton.endsWith("2")){

            renderFirstTable = false;
            renderSecondTable= true;

        }
        renderedPanelGroup = true;
    }
4

1 回答 1

4

您无法更新未渲染的元素,rendered=false“是一种 JSF 方式”以从 DOM 树中删除元素,

它不像 css display:none 或 visibility:hidden <- 这两个将保留 DOM 树中的元素但隐藏,而 JSF render=false 甚至不会渲染(保留)DOM 树中的元素(你甚至不会看到它在页面的“查看源代码”中)

因此,在您的情况下,您需要用另一个“panelGroup”包装 panelGroup 并更新包装器的 id

<h:panelGroup id="demandrequestpanelgrpid">
    <h:panelGroup rendered="#{demandManagedBean.renderedPanelGroup}"> 

. . .

也看看类似的问题

你能从 ap:ajax 监听器更新一个 h:outputLabel 吗?

于 2012-05-22T18:21:30.883 回答