如何从一个托管bean中获取值并使用它在回发时设置另一个托管bean的属性

时间:2012-05-23 00:40:05

标签: java forms jsf postback hidden

基本上我希望能够在页面加载时从一个托管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"/>

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

其中一种方法是将其作为请求参数传递。

<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