我有这段代码,这与我的想法完全不同.我尝试通过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>
Run Code Online (Sandbox Code Playgroud)
支持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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我重新单击该按钮时,属性不会更改.在serverlog中有一条消息,它说
INFO: finding..... (true)backingbeans.EFindUserManagedBean@5736b751
INFO: finding..... (true)backingbeans.EFindUserManagedBean@23959d6f
Run Code Online (Sandbox Code Playgroud)
很明显,托管bean存在一些问题,因为每次有请求时都会创建它,即使它应该是视图范围的.
我应该更改什么,以便面板组(id:"结果")可以改变它的可见性?不允许使用丰富的表面或任何其他技术.
非常感谢您的回答
您无法动态呈现未全时呈现的JSF组件.该对象必须存在于DOM客户端.使用rendered ="false"时,服务器端不会生成输出.
像这样更改你的代码:
<h:form>
<h:commandButton value="Render!" >
<f:ajax render=":result" listener="#{eFindUser.findUser}" />
</h:commandButton>
</h:form>
<h:panelGroup id="result">
<h:panelGroup layout="block" rendered="#{eFindUser.responseRendered}" >
This is some text that is supposed to be rendered later
</h:panelGroup>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
有了它,DOM将始终包含id ="result"的内容.
| 归档时间: |
|
| 查看次数: |
12759 次 |
| 最近记录: |