如何在PrimeFaces中更新LayoutUnit以使其呈现?

时间:2013-03-25 13:16:23

标签: jsf layout primefaces

我的xhtml中有一个fullPage布局,菜单位于西侧的layoutUnit,内容位于中心位置。

我已经实现了几个中心定位的layotUnits,我想根据所选的menuItem渲染它们。

当我运行应用程序时,它不会刷新layoutUnit,直到我在浏览器中单击刷新(IE8 - 公司标准)。

xhtml如下:

<h:body>
   <h:form>
      <p:layout fullPage="true" id="allLayout">

        <p:layoutUnit position="west" header="Menu" collapsible="true">
           <p:menu>
              <p:submenu label="Resources">
                 <p:menuitem value="Option1" action="#{menu.setSelectedMenu(menu.OPT1)}" update="allLayout"/>
                 <p:menuitem value="Option2" action="#{menu.setSelectedMenu(menu.OPT2)}" update="allLayout"/>
              </p:submenu>
          </p:menu>
        </p:layoutUnit>

        <p:layoutUnit position="center" rendered="#{menu.selectedMenu == menu.OPT1}">
           <p:outputLabel value="This is the content option 1 (default)."/>
        </p:layoutUnit>         

        <p:layoutUnit position="center" rendered="#{menu.selectedMenu == menu.OPT2}">
           <p:outputLabel value="This is the content option 2."/>
        </p:layoutUnit>

      </p:layout>
   </h:form>
</h:body>

它的豆是:

@ManagedBean
@SessionScoped
public class Menu {

   private final int OPT1 = 1;
   private final int OPT2 = 2;
   private int selectedOption;

   public Menu() {
      selectedMenu = OPT1;
   }

   public int getSelectedOption() {
      return selectedOption;
   }

   public void setSelectedOption(int selectedOption) {
      this.selectedOption = selectedOption;
   }

   public int getOPT1() {
      return OPT1;
   }

   public int getOPT2() {
      return OPT2;
   }
}

2 个答案:

答案 0 :(得分:2)

我认为您不想创建多个中心布局单元。我认为使用单个布局单元会更好,并更改单个单元内的内容。根据您的操作,您可能希望对该单元使用一些模板。我想说可能你最好的方法是将你的不同内容放在面板上然后将它们包装在一个父面板中,你将更新它以显示你想要的内容。

    <p:layout fullPage="true" id="allLayout">
        <p:layoutUnit position="west" header="Menu" collapsible="true">
            <p:menu>
                <p:submenu label="Resources">
                    <p:menuitem value="Option1"
                        action="#{menu.setSelectedMenu(menu.OPT1)}" update="optionPanel" />
                    <p:menuitem value="Option2"
                        action="#{menu.setSelectedMenu(menu.OPT2)}" update="optionPanel" />
                </p:submenu>
            </p:menu>
        </p:layoutUnit>

        <p:layoutUnit position="center">
            <p:panel id="optionPanel">
                <p:panel id="opt1Panel" rendered="#{menu.selectedMenu == menu.OPT1}">
                    <p:outputLabel value="This is the content option 1 (default)." />
                </p:panel>

                <p:panel id="opt2Panel"
                    rendered="#{menu.selectedMenu == menu.OPT2}">
                    <p:outputLabel value="This is the content option 2 (default)." />
                </p:panel>
            </p:panel>

        </p:layoutUnit>
    </p:layout>

答案 1 :(得分:0)

修改此部分:

<p:layoutUnit position="west" header="Menu" collapsible="true">
       <p:menu>
          <p:submenu label="Resources">
             <p:menuitem value="Option1" action="#{menu.setSelectedMenu(menu.OPT1)}"       
              update="allLayout" ajax="false"/>
             <p:menuitem value="Option2" action="#{menu.setSelectedMenu(menu.OPT2)}" 
              update="allLayout" ajax="false"/>
          </p:submenu>
      </p:menu>
    </p:layoutUnit>