繁体   English   中英

翻译 <h:panelGroup> 由jsf中的ajax提供

[英]rendering <h:panelGroup> by ajax in jsf

我有这段代码,这与我的想法完全不同。 我尝试通过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存在一些问题,因为每次有请求时都会创建它,即使它应该是视图范围的。

我应该更改什么,以便面板组(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>

有了它,DOM将始终包含id =“result”的内容。

这对我有用:

<ui:composition>
<h:form id="mainForm">
        <h:commandButton value="Render!" action="#{eFindUser.findUser}">
            <f:ajax event="action"  render=":result" />
        </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>

</ui:composition>

豆角,扁豆:

@ManagedBean
@ViewScoped
public class EFindUser implements Serializable{
    private static final long serialVersionUID = -7106162864352727534L;
    private boolean responseRendered = false;

    public EFindUser() {
    }

    public void findUser() {
        responseRendered = !responseRendered;
        System.out.println("finding..... ("+ responseRendered+")" + this);
    }
    public boolean isResponseRendered() {
        return responseRendered;
    }

    public void setResponseRendered(boolean responseRendered) {
        this.responseRendered = responseRendered;
    }       
}

看看JSF 2.0 + Ajax Hello World示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM