【问题标题】:Retrieving value of JSF input field without managed bean property [closed]检索没有托管 bean 属性的 JSF 输入字段的值
【发布时间】:2013-09-30 21:45:15
【问题描述】:

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

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

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

我怎样才能做到这一点?

【问题讨论】:

  • 你忘了告诉你要在哪里检索它。
  • 在我的 ManagedBean 中,它与一些没有备注和密码字段的实体相关联
  • 但是您在标题中字面意思是“没有托管 bean”。你想要什么?
  • 我想在一个与我的输入框无关的 Java ManagedBean 类中访问一个与任何 bean 无关的 JSF 输入框值。例如:在我的 UI 上,我可能有 UserID、UserName、UserAddress 的字段(都与 ManagedBead - User 相关联),我也有像 remark 这样的字段,它不与任何 bean 相关联。我想检索Java Bean中独立备注输入框值的值。 ....
  • 啊哈,我明白你的意思了。我澄清了这个问题。

标签: jsf input managed-bean


【解决方案1】:

只需像 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 :)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你忘了说这究竟是如何解决 OP 的具体问题的。
    • 链接,尤其是第一个链接提供了更多详细信息和解释,但似乎 OP 询问的是参数,既不是独立属性也不是绑定。
    • 是的,如果您充分点击,我知道答案是间接在这些链接之一的某处。但是,您在答案中无处指出确切的解决方案,因此读者在点击时不知道在哪里停下来。换句话说,你并没有具体回答这个问题,而是基本上说“嗯,它可能在这里。试着看看这里。”这是相当无益的。然后发表评论:)
    • 现在,我搞定了,谢谢我们的老师;)
    猜你喜欢
    • 2012-06-30
    • 2013-07-27
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2011-03-07
    • 2011-07-10
    • 2011-12-25
    相关资源
    最近更新 更多