检索没有托管bean属性的JSF输入字段的值

时间:2013-09-25 10:35:31

标签: jsf input managed-bean

我想在托管bean操作方法中检索JSF输入框的值,而不与任何托管bean属性相关联。 E.g。

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

我的用例是,在我的应用程序中,我想提示用户在这里和那里获取每个DML操作的密码,因此喜欢在我的每个UI上都有一个密码和注释相关的字段,并且需要注释保存在公用表中以供审计。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:5)

就像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:)

答案 1 :(得分:-3)

如果remark属性独立于任何实体,那么它将仅作为属性,根据您的需要依赖于托管bean sessionScoped或requestScoped,以及您想要的内容。 如果您希望此属性与任何Java-Beans无关,那么您可以使用inputText标记的attirbute binding

要做到这一点,请参阅M. @BalusC的良好反应:How does the 'binding' attribute work in JSF? When and how should it be used?

另见:The reasons to use binding in a JSF form