0

从请求的参数中设置托管 bean 的属性的正确(最佳)方法是什么?

我的 JSF 页面的 URL 如下所示:

https://eample.com/app/faces/page.xhtml?ts=2012-01-05T10:00:00.000

我发现我可以使用以下方法读取参数:

<h:outputText value="#{param['ts']}" />

但我真正需要做的是从这个值设置我的 bean 的属性。那么最好的JSF方式是什么,所以我得到了一些结果Java代码如下:

myBean.setTimestamp(request.getParameter("timestamp"));

非常感谢

4

2 回答 2

1

假设一个具有请求范围的 JSF 托管 bean,将其作为托管属性注入:

import javax.faces.bean.*;

@ManagedBean @RequestScoped
public class ReqBean {
    @ManagedProperty("#{param.ts}") private String ts;

    public String getTs() {
        return ts;
    }

    public void setTs(String ts) {
        this.ts = ts;
    }
}

如果 bean 在更广泛的范围内,您将需要以编程方式查找它:

private String lookUpTs() {
    return FacesContext.getCurrentInstance()
                       .getExternalContext()
                       .getRequestParameterMap()
                       .get("ts");
}

如果您使用的是 CDI bean,则需要考虑其他选项(请参阅此处了解一种方法。)

于 2013-01-07T12:35:47.670 回答
0

根据您的问题历史,您正在使用 JSF2,所以<f:viewParam>应该这样做。

<f:metadata>
    <f:viewParam name="ts" value="#{myBean.timestamp}" />
</f:metadata>

而已。

从(like等)<f:viewParam>扩展而来,您甚至可以使用例如和对其执行转换和验证。UIInput<h:inputText><f:convertDateTime>required="true"

<f:metadata>
    <f:viewParam id="ts" name="ts" value="#{myBean.timestamp}" required="true">
        <f:convertDateTime pattern="yyyy-MM-dd'T'HH:mm:ss.SSS" />
    </f:viewParam>
</f:metadata>
...
<h:message for="ts" />

这样,它#{myBean.timestamp}可以成为一个完全值得的java.util.Date财产。任何转换和验证错误最终都将<h:message><f:viewParam id>.

请注意,与 with 不同@ManagedProperty,the#{myBean}只能是@ViewScoped一个。

也可以看看:

于 2013-01-07T12:47:22.563 回答