我有这段代码,它并不完全符合我的想法。我尝试通过 Ajax 设置属性,然后重新渲染一个组件。我的 .xhtml 看起来像这样
<h:form>
<h:commandButton value="Render!" >
<f:ajax render=":result" listener="#{eFindUser.findUser}" />
</h:commandButton>
</h:form>
<h:panelGroup id="result" layout="block" rendered="#{eFindUser.responseRendered}" >
This is some text that is supposed to be rendered later
</h:panelGroup>
支持 bean 看起来像这样
@Named(value = "eFindUser")
@ViewScoped
public class EFindUserManagedBean implements Serializable{
private boolean responseRendered = false;
/**
* Creates a new instance of EFindUserManagedBean
*/
public EFindUserManagedBean() {
}
public void findUser(AjaxBehaviorEvent abe) {
responseRendered = !responseRendered;
System.out.println("finding..... ("+ responseRendered+")" + this);
}
public boolean isResponseRendered() {
return responseRendered;
}
public void setResponseRendered(boolean responseRendered) {
this.responseRendered = responseRendered;
}
}
当我重新单击该按钮时,该属性未更改。serverlog 中有一条消息,上面写着
INFO: finding..... (true)backingbeans.EFindUserManagedBean@5736b751
INFO: finding..... (true)backingbeans.EFindUserManagedBean@23959d6f
显然,托管 bean 存在一些问题,因为它是在每次有请求时创建的,即使它应该是视图范围的。
我应该改变什么,以便 panelgroup(id:"result") 可以改变它的可见性?不允许使用 Richfaces 或任何其他技术。
非常感谢您的回答