0

我在下面有这段代码:

<h:inputText id="userName" />
...
<h:commandButton actionListener="..." action="...">
<f:param name="userInput" value="user" />
</h:commandButton>

基本上我想获取 inputText 的值(由客户端提交)并将其存储到<f:param>标签的属性中,value. 我想这样做,所以我可以从请求参数中访问用户名。有没有办法做到这一点?我知道我可以使用 bean 来存储输入值,但我只是想知道是否可以将请求值存储到请求参数对象中。

4

2 回答 2

1

有一些方法:

  1. 自己从请求参数映射中获取。根据标准 HTML 规范,HTML 输入元素的 name 属性表示 HTTP 请求参数名称。在 JSF 中,HTML 输入元素的名称与组件的客户端 ID 相同。

    所以,给定一个

    <h:form id="form">
        <h:inputText id="userName" ... />
    

    其中生成一个<input name="form:userName">,可以获取提交的值如下

    String userName = context.getExternalContext().getRequestParameterMap().get("form:userName");
    

  2. 自己从组件中获取它UIInput#getValue()。JSF 已经执行了应用请求值、转换/验证它们和更新模型值的步骤。如果您不将value输入组件的属性绑定到 bean 属性,那么它会粘在组件本身中。你只需要访问它。组件通过其客户端 ID 在组件树中可用。

    UIInput userNameComponent = context.getViewRoot().findComponent("form:userName");
    String userName = (String) userNameComponent.getValue();
    

  3. 将输入组件绑定到视图并UIInput#getValue()作为操作方法参数传递。

    <h:inputText binding="#{userName}" ... />
    <h:commandButton ... action="#{bean.submit(userName.value)}" />
    

    public void submit(String userName) {
        // ...
    }
    

不用说,仅仅将输入值绑定到 bean 上就干净多了。

于 2013-01-17T13:56:59.890 回答
0

你不需要f:param。您可以像这样访问提交的文本:

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("generatedParameter");

生成的参数名称并不像userName您的情况那么简单,因为 JSF 准备了组件命名容器的 id。最简单的方法是检查生成的 HTML 代码并查看输入组件的名称。

于 2013-01-17T11:04:42.370 回答