我是JSF的新手。在我的项目中使用@ManagedBean,@ RequestScoped。我在我的项目中使用了4页。我的问题是在第二页,第三页和第四页中没有维护bean值。我正确地使用了getter和setter。如果我不使用@ManagedProperty正确维护bean值。但我需要使用 @ManagedProperty。你能告诉我如何解决这个问题吗?我复制了一些示例代码供参考。
@ManagedBean
@RequestScoped
public class ArticlePrepToolManagedBean implements Runnable, Serializable {
@ManagedProperty (value="#{param.jidName}")
private String jidName;
@ManagedProperty (value="#{param.aidName}")
private String aidName;
private List<com.elsevier.ArticlePrepTool.db.ItemZipContains> usabilityDetailList = null;
public String getAidName() {
return aidName;
}
public void setAidName(String aidName) {
this.aidName = aidName;
}
public String getJidName() {
return jidName;
}
public void setJidName(String jidName) {
this.jidName = jidName;
}
public List<ItemZipContains> getUsabilityDetailList() {
return usabilityDetailList;
}
public void setUsabilityDetailList(List<ItemZipContains> usabilityDetailList) {
ArticlePrepToolManagedBean.usabilityDetailList = usabilityDetailList;
}
}
我的项目网址是(http:// localhost:8080 / articlepreptool /),但我项目的输入是jidName = AEA aidName = 10663。某个其他网页提供的输入,如果用户使用以下href“PrepTool”触发。取决于输入我在项目数据库中获取了一些数据(使用JPA)并在第一页中列出数据。但是,如果我进入下一页,我从DB获得的所有先前存储在该列表中的数据都被清除,这是所有列表值,并且在bean中设置的变量变为空。所以你能告诉我如何解决这个问题。只有当我使用@ManagedProperty时才会出现这个问题。我使用@ManagedProperty通过url获取输入值,因为我的项目的输入值来自其他网页。
答案 0 :(得分:1)
@ManagedProperty("#{param.foo}")
基本上在bean构造之后将名称为"foo"
的HTTP请求参数设置为bean属性。如果您正在为它们检索null
值,那么它只是意味着HTTP请求中不存在这些参数。
假设您通过普通链接进行导航,那么您需要修复链接以包含请求参数:
<h:link value="Go to page2" outcome="page2">
<f:param name="jidName" value="#{bean.jidName}" />
<f:param name="aidName" value="#{bean.aidName}" />
</h:link>
这将导致类似:
<a href="page2.xhtml?jidName=foo&aidname=bar">
这样可以将这些参数设置为bean属性。
或者,您可以在所有网页上使用@ManagedProperty
代替<f:viewParam>
,并在结果中添加includeViewParams=true
。另请参阅ViewParam vs @ManagedProperty(value = "#{param.id}")
如果您通过表单提交进行导航,那么实际上没有理由使用它们。或者您必须滥用表单而不是普通的页面到页面导航的链接。