1

基本的に、ページがロードされたときに 1 つのマネージド Bean から値を取得し、その元の値を使用して別の Bean (フォーム内の他の値と共に) にポストバックできるようにしたいと考えています...

ここに私がこれまでに持っているものの一部があります(これはすべてフォームにあり、機能しています...)

 <h:selectOneMenu id="categoryMenu" required="true"
                                         value="#{expense.categoryID}" label="Category" onchange="

                                                var value = myJQuery(this).val().toLowerCase();
                                                alert('You chose ' + value)">
                            <f:selectItem itemValue="0" itemLabel=""/>
                            <f:selectItem itemValue="1" itemLabel="Food"/>
                            <f:selectItem itemValue="2" itemLabel="Gas"/>
                            <f:selectItem itemValue="3" itemLabel="Clothing"/>
                            <f:selectItem itemValue="4" itemLabel="Recreation"/>
                            <f:selectItem itemValue="5" itemLabel="Other"/>

                        </h:selectOneMenu>
                        <h:message for="categoryMenu"/>
                        <h:outputLabel for="amount" value="Amount" styleClass="requiredLbl"/>
                        <h:inputText id="amount" value="#{expense.amount}" required="true" label="Amount"/>
                        <h:message for="amount"/>
                        <br/>
                        <p:commandButton id="btnSave" value="Save" action="#{expense.saveExpense}" ajax="false"/>
                    </h:panelGrid>

しかし、私はこの値をポストバックに含めたいと思っています(非表示のフォームである必要はありませんが、あなたは私の主張を理解しています)...

 <input type="hidden" value="#{loginController.userID}" id="hiddenCategory"/>

何かご意見は?

4

1 に答える 1

4

方法の 1 つは、リクエスト パラメータとして渡すことです。

<p:commandButton id="btnSave" value="Save" action="#{expense.saveExpense}" ajax="false">
    <f:param name="userID" value="#{loginController.userID}" />
</p:commandButton>

がリクエスト スコープの場合は#{expense}、次のように設定します。

@ManagedProperty("#{param.userID}")
private Long userID; // +setter

ただし、エンドユーザーがこの値を完全に制御できることを理解する必要があります。変数名が示すように、これが実際に現在ログインしているユーザーを表している場合は、フォーム送信を通じて渡す必要はありません。

#{loginController}がセッション スコープの Bean であると仮定すると、#{expense}次のように Bean に注入するだけです。

@ManagedProperty("#{loginController}")
private LoginController loginController; // +setter

また

@ManagedProperty("#{loginController.userID}")
private Long userID; // +setter
于 2012-05-23T03:37:54.873 に答える