f:param不传递参数或参数未设置

时间:2014-01-24 13:33:34

标签: jsf jsf-2.2 viewparams

我使用h:linkincludeViewParams=true在我的列表和视图页面之间导航,并使视图页面URL可收藏,但不起作用。 以下是我的代码的相关部分:

layout.xhtml(我的模板)中的

<f:view locale="#{localeBean.lang}">
    <ui:insert name="metadata"/>

在Articles.xhtml(我的列表页面)中:

<h:form>
    <p:datagrid var="item" value="articleController.items">
        <p:column>
            <h:link outcome="View_Articles?faces-redirect=true&amp;includeViewParams=true" styleClass="view-details">
               <h:outputText value="#{item.title}"/>     
               <f:param name="id" value="#{item.articleId}"/>
            </h:link>
        </p:column>
    </p:datagrid>
</h:form>
View_Article.xhtml中的

(我的视图详情页面):

<ui:composition template="./WEB-INF/templates/layout.xhtml"> 
     <ui:define name="metadata">
         <f:metadata>
             <f:viewParam name="id" value="#{articleController.id}" />
             <f:viewParam name="id" value="#{articleLclController.id}"/>
         </f:metadata>
</ui:define>

更多信息: 我使用JSF 2.2,ocpsoft重写过滤器,primefaces库,ArticleController.java是会话作用域。

我尝试了以下内容:

1-我使用h:commandLink;有了这个,导航工作,但URL不包括view-params

Articles.xhtml:

<h:commandLink id="viewArticleDetails" action="#{articleController.viewArticleByID()}" styleClass="view-details">
    <h:outputText value="View Details"/>
    <f:setPropertyActionListener target="#{articleController.id}" value="#{item.articleId}"/>
    <f:setPropertyActionListener target="#{articleLclController.id}" value="#{item.articleId}"/>
</h:commandLink>

ArticleController.java:     ...

private Long id;

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
    current = ejbFacade.find(id);
}

public String viewArticleByID(){                      
    return "View_Article?faces-redirect=true&amp;includeViewParams=true";
}

...

我希望该网址为http://localhost:8080/testApp/en/View_Article?id=1,但就像`http://localhost:8080/testApp/en/View_Article

一样

2-我插入了http://localhost:8080/testApp/en/View_Article?id=1,它在两种情况下均有效。

1 个答案:

答案 0 :(得分:1)

includeViewParams参数仅适用于已在给定视图中的视图参数(在您的情况下, Articles.xhtml 您还没有任何参数) )。只需将它们传递给f:param即可。如果您想执行简单的GET请求,最好使用h:link

<h:link outcome="View_Articles" styleClass="view-details">
   <h:outputText value="#{item.title}"/>     
   <f:param name="id" value="#{item.id}" />
</h:link>

这样您就可以在目标网页上获取商品ID,但这还不足以在地址栏中更改网址。要实现这一点,请在结果中添加?faces-redirect=true以强制重定向。

另见: