4

我想在托管 bean 操作方法中检索 JSF 输入框的值,而不会将它与任何托管 bean 属性关联。例如

<p:inputText id="txtuserid" value="" />

我的用例是,在我的应用程序中,我想在这里和那里提示用户为每个 DML 操作输入密码,因此希望在我的每个 UI 上都有一个密码和评论相关字段,并且备注需要保存在一个用于审计目的的公用表。

我怎样才能做到这一点?

4

2 回答 2

6

只需像 JSF 在幕后所做的一样:获取 HTTP 请求参数。如果您熟悉基本的 HTML,就会知道每个 HTML 输入元素都将其name=value对作为 HTTP 请求参数发送。

给定一个

<h:form id="formId">
    <p:inputText id="userId" /> <!-- Note: no value attribute at all, also no empty string! -->
    ...
    <p:commandButton value="submit" action="#{bean.submit}" />
</h:form>

基本上生成以下HTML

<form id="formId" name="formId">
    <input type="text" name="formId:userId" ... />
    ...
    <button type="submit" ...>submit</button>
</form>

您可以从以下位置获取它ExternalContext#getRequestParameterMap()

public void submit() {
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    String userId = ec.getRequestParameterMap().get("formId:userId");
    // ...
}

如有必要,不要忘记手动转换和验证它,就像 JSF 在幕后所做的那样。换句话说,只需通过编写额外的代码来重复 JSF 的工作,这样您的代码就不会DRY :)

于 2013-09-25T12:08:31.190 回答
-3

如果remarks 属性独立于任何实体,那么它将仅作为属性依赖于托管 bean sessionScoped 或 requestScoped 根据您的需要,依赖于您想要的。如果您希望此属性独立于任何 Java Bean,则可以使用bindinginputText 标记的属性。

为此,请参阅此处 M. @BalusC 的良好回应:JSF 中的“绑定”属性如何工作?何时以及如何使用它?

另请参阅:在 JSF 表单中使用绑定的原因

于 2013-09-25T11:55:41.293 回答