gpt4 book ai didi

java - 渲染 by ajax in jsf

转载 作者:行者123 更新时间:2023-12-03 01:56:51 29 4
gpt4 key购买 nike

我有这段代码,它并不完全符合我的想法。我尝试通过 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;
}
}

当我重新单击该按钮时,属性不会更改。服务器日志中有一条消息,上面写着

INFO: finding..... (true)backingbeans.EFindUserManagedBean@5736b751
INFO: finding..... (true)backingbeans.EFindUserManagedBean@23959d6f

显然,托管 bean 存在一些问题,因为每次有请求时都会创建它,即使它应该是 View 范围的。

我应该更改什么以便 panelgroup(id:"result") 可以更改其可见性?不允许使用 Richfaces 或任何其他技术。

非常感谢您的回答

最佳答案

您无法动态呈现并非始终呈现的 JSF 组件。该对象必须存在于 DOM 客户端中。当使用 render="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>

这样,DOM 将始终包含 id="result"的内容。

关于java - 渲染 <h :panelGroup> by ajax in jsf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16387067/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com