从请求的参数设置托管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"));
非常感谢
答案 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}}。