从请求参数设置bean属性

时间:2013-01-07 12:25:11

标签: jsf parameters request

从请求的参数设置托管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"));

非常感谢

2 个答案:

答案 0 :(得分: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,则需要考虑其他选项(有关一种方法,请参阅here。)

答案 1 :(得分:0)

根据您的问题历史记录,您使用的是JSF2,因此<f:viewParam>应该这样做。

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

就是这样。

由于<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>相关联的@ManagedProperty中结束。

请注意,与#{myBean}不同,@ViewScoped只能是{{1}}。

另见: