基本上我希望能够在页面加载时从一个托管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"/>
有什么想法吗?
答案 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