3

ビュー スコープを持つ 1 つの Bean があり、2 つの異なるページ間で、このリンクの前の最初のページでパラメーターを渡したいと考えてい<p:selectOneMenu/>ます。どの ID を GET パラメーターとして渡すかをテストします。

<p:selectOneMenu value="#{addQuestion.test}" id="tests"
    converter="#{testConverter}" required="true" requiredMessage="Please, choose test">
    <f:selectItem itemLabel="--Select a test--" itemValue="" />
    <f:selectItems value="#{addQuestion.testList}" var="testItem"
        itemValue="#{testItem}" itemLabel="#{testItem.testName}" />
    <p:ajax process="@this"
        listener="#{addQuestion.getQuestionsBySubject()}"
        update="addingQuestionsTable, testId" />
</p:selectOneMenu>
<h:link value="Add new question" outcome="addQuestion">
    <f:param id="testId" name="testId" value="#{addQuestion.test.testIdentifer.testId}"/>
</h:link>

// 2 ページ目

<f:metadata>
    <f:viewParam name="testId"
        value="#{addQuestion.test.testIdentifer.testId}"
        converter="#{testConverter}" required="true" requiredMessage="Invalid page access. Please use a link from within the system."/>
</f:metadata>

そして豆

@ManagedBean(name = "addQuestion")
@ViewScoped
public class AddQuestion implements Serializable {
    private Test test;
    //get
    //set
}

しかし、2番目のページで値を取得しようとすると、式では何も得られず#{addQuestion.test.testIdentifer.testId}"、開発モードでも得られます

null の値を持つため、URL に追加されません。

#{testConverter}はビュースコープのマネージドBeanです。

ビュー スコープを持つ 1 つの Bean で testId を渡す方法と、このエラーが発生する理由を教えてください。

4

1 に答える 1

10

<f:xxx>ようなタグ<f:param>は HTML を生成しないため、ajax リクエストで HTML DOM ツリーを更新する必要はありません。コンポーネントは、<h:xxx>HTML を生成し、ajax 要求で HTML DOM ツリーで更新可能なコンポーネントです。<h:link>タグの代わりにコンポーネントを更新する必要があります<f:param>。それで、それをidから<f:param>に移動し<h:link>ます。

<h:link id="testId" value="Add new question" outcome="addQuestion">
    <f:param name="testId" value="#{addQuestion.test.testIdentifer.testId}"/>
</h:link>
于 2012-12-12T19:20:57.797 に答える