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

NKS*_*NKS 3 jsf input managed-bean

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

<p:inputText id="txtuserid" value="" />
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)

基本上生成以下HTML

<form id="formId" name="formId">
    <input type="text" name="formId:userId" ... />
    ...
    <button type="submit" ...>submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

你可以从以下方式抓住它ExternalContext#getRequestParameterMap():

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

不要忘记在必要时手动转换和验证它,就像JSF在幕后做的那样.换句话说,只需编写额外的代码重复JSF的工作,这样你的代码就不干了 :)