6

f:paramとうまく機能しますが、またはとはうまくいきh:linkません。p:commandLinkh:commandLink

たとえば、2 つのページtest_first.xhtmltest_second.xhtml、およびバッキング Java Bean がありTestBean.javaます。

私は走り始めますtest_first.xhtml

をクリックlink1するh:linkと、ページは にリダイレクトされtest_second.xhtmlます。の助けを借りてf:param、ブラウザのアドレスバーが表示され.../test_second.xhtml?id=1ます。そのページに、testBean.userId印刷されます。

link2またはをクリックするlink3と、ページは にリダイレクトされtest_second.xhtmlます。ただし、アドレスバー.../test_second.xhtmlには のみが表示され、 NO ?id=#!はありません。そしてtestBean.userId、そのページには印刷されません。

どうすればcommandLink動作しf:paramますか? リンクを別のページにリダイレクトするのではなく、データに応じて Bean のいくつかのメソッドを呼び出したい場合があります。

test_first.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:head/>
<h:body>
<h:form>
    <h:link value="link1" outcome="test_second" >
        <f:param name="id" value="1"/>
    </h:link>
    <br/><br/>
    <h:commandLink value="link2" action="test_second?faces-redirect=true" >
        <f:param name="id" value="2" />
    </h:commandLink>
    <br/><br/>
    <p:commandLink value="link3" action="test_second?faces-redirect=true">
        <f:param name="id" value="3" />
    </p:commandLink>
    <br/><br/>
</h:form>
</h:body>
</html>

test_second.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<f:metadata>
    <f:viewParam name="id" value="#{testBean.userId}" />
</f:metadata>
<h:head/>
<h:body>
<h:form>
    This is the second page.
    <h:outputText value="Selected id is #{testBean.userId}" />
    <h:commandButton value="Print page id" action="#{testBean.print()}" />
</h:form>
</h:body>
</html>

TestBean.java

@ManagedBean
@SessionScoped
public class TestBean implements Serializable{
    private Integer userId;

    public void print() {
        System.out.println(userId);
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }
}
4

2 に答える 2

2

&アクション属性でパラメータを直接連結することでそれを行うことができます。

<p:commandLink value="link3" action="test_second?faces-redirect=true&id=3"/>

更新 1

を追加することも検討して&includeViewParams=trueください。このようにして、ターゲット ナビゲーションのビュー パラメーターが自動的に含まれます。

于 2013-08-21T05:58:47.450 に答える