我想在托管bean操作方法中检索JSF输入框的值,而不与任何托管bean属性相关联。 E.g。
<p:inputText id="txtuserid" value="" />
我的用例是,在我的应用程序中,我想提示用户在这里和那里获取每个DML操作的密码,因此喜欢在我的每个UI上都有一个密码和注释相关的字段,并且需要注释保存在公用表中以供审计。
我怎样才能做到这一点?
答案 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?