Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 渲染<;h:panelGroup>;jsf中的ajax_Java_Jsf 2 - Fatal编程技术网

Java 渲染<;h:panelGroup>;jsf中的ajax

Java 渲染<;h:panelGroup>;jsf中的ajax,java,jsf-2,Java,Jsf 2,我有一段代码,它和我想的不完全一样。我尝试通过Ajax设置属性,然后重新渲染一个组件。我的.xhtml看起来像这样 <h:form> <h:commandButton value="Render!" > <f:ajax render=":result" listener="#{eFindUser.findUser}" /> </h:commandButton> </h:

我有一段代码,它和我想的不完全一样。我尝试通过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>
@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或任何其他技术

非常感谢您的回答

这对我很有用:

<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>

看看

你不能动态地呈现一个不是一直呈现的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”的内容。

可能是,但这并不能解决视图范围的托管bean的重新创建问题。这样一来,
{efinduster.responserdered}“
总是被解析为false。非常感谢您的解决方案!正如您所说,只需指出第一个
面板组将始终生成一个
(如果第二个面板组的呈现属性为false,则无效)但对我来说不起作用。可能是因为我在使用CDI。是的!就是这样。CDI没有查看范围。结合Alexandre Lavoie的回答,我让它起作用了,谢谢。
<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>