1

我的 xhtml 中有一个 fullPage 布局,其中一个用于菜单的西方布局单元和一个用于内容的中心布局单元。

我已经实现了几个居中定位的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>

它的 bean 是:

@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;
   }
}
4

2 回答 2

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>
于 2013-03-25T14:21:40.747 回答
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>
于 2013-09-17T18:03:10.893 回答