在JSF2中渲染表单范围之外的组件

在JSF2中渲染表单范围之外的组件,第1张

概述我正在创建一个简单的页面,在单击按钮后,将一个panelGroup替换为另一个.一,代码: <h:body> <ui:composition template="/elements/templateWithMenu.xhtml"> <ui:define name="content"> <div class="rightCont 我正在创建一个简单的页面,在单击按钮后,将一个panelGroup替换为另一个.一,代码:

<h:body>    <ui:composition template="/elements/templateWithMenu.xhtml">                   <ui:define name="content">            <div >                <h:panelGroup ID="lol" rendered="#{test.firstStep.booleanValue()}">                    <h3>This should disappear</h3>                    <h:form ID="newPollForm1" rendered="#{test.firstStep.booleanValue()}">                         <fIEldset>                            <h:commandlink value="Next" action="#{test.firstStepCompleted()}" >                                <f:AJAX execute="@all" render="lol" />                            </h:commandlink>                        </fIEldset>                    </h:form>                </h:panelGroup>                <h:panelGroup rendered="#{test.secondStep.booleanValue()}">                    Works!                </h:panelGroup>            </div>             </ui:define>    </ui:composition></h:body>

支持bean只是将firstStep设置为false,将secondStep设置为true.

现在,当我尝试运行时,我得到了< f:AJAX>包含一个未知的ID’lo’ – 无法在组件j_IDt39的上下文中找到它.在谷歌搜索后,我发现对于表单范围之外的元素,我需要使用SEParaTOR_CHAR(:).那没用.所以我尝试搞乱#{component}和#{cc}的不同组合,但没有任何效果.我甚至发现了this令人敬畏的解释,但同样,我失败了.如果我使用@all,一切正常(一个面板被另一个面板替换),但我真的需要渲染一个特定的组件.

救命?请?

解决方法 您需要更新公共父级< div class =“rightContent”>代替.总是呈现这一个,从而保证JavaScript / AJAX可以访问和维护其子代.将其替换为< h:panelGroup layout =“block”>并给它一个ID.

<h:panelGroup layout="block" ID="content" >    <h:panelGroup rendered="#{test.firstStep}">        <h3>This should disappear</h3>        <h:form ID="newPollForm1">             <fIEldset>                <h:commandlink value="Next" action="#{test.firstStepCompleted()}" >                    <f:AJAX execute="@form" render=":content" />                </h:commandlink>            </fIEldset>        </h:form>    </h:panelGroup>    <h:panelGroup rendered="#{test.secondStep}">        Works!    </h:panelGroup></h:panelGroup>

使用此Test.java类:

import javax.faces.bean.ManagedBean;import javax.faces.bean.VIEwScoped;@ManagedBean@VIEwScopedpublic class Test {    private int number = 0;    public voID firstStepCompleted() {        number++;    }    public boolean isFirstStep() {        return number == 0;    }    public boolean isSecondStep() {        return number == 1;    }}

请注意,我删除了多余的Boolean#booleanValue()调用以及表单上重复的呈现的转义.

如果仍然不起作用,则/elements/templateWithMenu.xhtml显然包含另一个已添加其ID的命名容器组件.对于尚未记住所有命名容器组件的初学者来说,一个简单的方法来计算真正正确的客户端ID是在浏览器中打开页面,右键单击并查看源代码,然后找到JsF生成的HTML元素并准确获取其ID属性value(并在< f:AJAX render>中)加上前缀:

总结

以上是内存溢出为你收集整理的在JSF2中渲染表单范围之外的组件全部内容,希望文章能够帮你解决在JSF2中渲染表单范围之外的组件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1063986.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存