4

我有一个这样的 PrimeFaces 3.4 菜单栏:

<h:form>
    <p:menubar>
        <p:submenu label="File">
            <p:submenu label="New">
                <p:menuitem value="Go" id="page1LinkID" action="#{navBean.goNav}">     
                    <f:param id="page1ParamID" name="pageViewID" value="Page1"/>
                </p:menuitem>
                <p:menuitem value="Other" url="#"/>
            </p:submenu>
        </p:submenu>
    </p:menubar>
</h:form>

后备豆是这样的

@ManagedBean
@RequestScoped
public class navBean {

/**
 * Creates a new instance of navBean
 */
private String includedPage = "contentMain.xhtml";
public navBean() {
}
public String getPage(){
    return includedPage;
}
public void setPageName(){
    this.includedPage = includedPage;
}

public String goNav() {
   FacesContext context = FacesContext.getCurrentInstance();
   String selectedPageViewId = context.getExternalContext().getRequestParameterMap().get("pageViewId");
   if (selectedPageViewId.equalsIgnoreCase("page1")){
        includedPage = "test.xhtml";
    }
}   

问题是它不起作用,没有例外。我最初尝试将动作变成这样...将 goNav 更改为 void...nothing。

有任何想法吗?提前谢谢瑞克

4

2 回答 2

6

Primefaces menuitem 在这种情况下有一个 url 属性:

url:单击 menuitem 时要导航的 URL。

如果您不使用“url”但想使用“action”,请记住您正在执行发布请求。

在这种情况下,您应该

  1. 将 ?faces-redirect=true 添加到返回的字符串中,例如 "test.xhtml?faces-redirect=true"
  2. 在您的菜单项中设置 ajax=false,例如

请参阅primefaces 的主要开发人员的这个答案

于 2013-04-15T14:43:32.353 回答
0

尝试这个

   public String goNav() {
       FacesContext context = FacesContext.getCurrentInstance();
       String selectedPageViewId = context.getExternalContext().getRequestParameterMap().get("pageViewId");
       if (selectedPageViewId.equalsIgnoreCase("page1")){
           includedPage = "test.xhtml?redirect=true";

       }
       return includedPage;
}
于 2013-04-15T14:25:49.213 回答