都是copy 惹的祸

本文探讨了在使用JSF框架进行页面局部刷新时遇到的问题。作者通过实践发现,当<a4j:region renderRegionOnly=true>标签与其他需要局部刷新的元素结合使用时,可能会导致页面无法正常更新。文章最终给出了有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 renderRegionOnly="true" VS reRender

 

<h:panelGrid columns="2" columnClasses="label-col, value-col" style="margin-bottom:30px;width:100%;">

<h:outputLabel  value="Package: " />
             <a4j:region renderRegionOnly="true">
                 <h:selectOneListbox id="package" style="width:200px;" size="1"
                         value="#{agencyEditBean.packageTypeId}">
                         <a4j:support event="onchange"
                                      action="#{agencyEditBean.reloadPackageType}"
                                      reRender="page:form:packagePage:subForm:compCardTemplates,page:form:packagePage:subForm"
                                      limitToList="true" eventsQueue="packageQueue"/>

                         <f:selectItem itemValue="" itemLabel="Please Select"/>
                         <f:selectItems value="#{agencyEditBean.packageTypes}"/>
                 </h:selectOneListbox>
             </a4j:region>
             <h:outputLabel for="packageName" value="Package Name: " />
             <a4j:region rendered="#{agencyEditBean.packageType != null}" renderRegionOnly="true">
                 <h:inputText id="packageName" value="#{agencyEditBean.packageType.name}"
                              requiredMessage="Package name is required."
                              required="true" maxlength="50" size="30">
                     <a4j:support event="onblur" action="null" ajaxSingle="true"/>
                 </h:inputText>
                 <rich:message for="packageName" errorClass="error"/>
             </a4j:region>
             <h:outputLabel for="packageDesc" value="Package Descripition: " />
             <h:inputText id="packageDesc" value="#{agencyEditBean.packageType.description}" rendered="#{agencyEditBean.packageType != null}" maxlength="50" size="30">
             </h:inputText>
            
            <h:outputLabel for="price" value="Price($): " />
            <a4j:region rendered="#{agencyEditBean.packageType != null}" renderRegionOnly="true">
                <h:inputText id="price" value="#{agencyEditBean.packageType.packageAmt}" size="10">
                    <f:convertNumber maxFractionDigits="2"/>
                </h:inputText>
            </a4j:region>
            <h:outputLabel value="Package Options: " />
            <a4j:region rendered="#{agencyEditBean.packageType != null}" renderRegionOnly="true">
                 <h:selectBooleanCheckbox id="specialPackage" value="#{agencyEditBean.packageType.special}"/>
                 <h:outputLabel for="specialPackage" value="Special Package: "/>
                 <h:selectBooleanCheckbox id="childPackage" value="#{agencyEditBean.packageType.child}"/>
                 <h:outputLabel for="childPackage" value="Child Package: "/>
                 <h:selectBooleanCheckbox id="enabled" value="#{agencyEditBean.packageType.enabled}"/>
                 <h:outputLabel for="enabled" value="Enabled: "/>
            </a4j:region>
           
             <h:outputLabel for="artistType" value="Artist Type: " />
             <h:selectManyListbox id="additionalArtistTypes" style="width:200px;" size="4"
                                  value="#{agencyEditBean.packageArtistTypes}">
                 <f:selectItems value="#{agencyEditBean.artistTypes}"/>
             </h:selectManyListbox>
        </h:panelGrid>
        <h:outputLabel value="Package Items" style="background-Color:gray; align:center" />
   
        <h:panelGroup id="compCardTemplates">
            <h:outputLabel value="Comp Card Templates" style="background-Color:gray; align:center" />
            <br/>
            <a4j:region rendered="#{agencyEditBean.packageType != null}" renderRegionOnly="true">
                <h:selectBooleanCheckbox value="#{agencyEditBean.compCardTemplateMap[1]}"/>
                 <h:graphicImage id="compCard1" url="/images/compcard/CompCard1.gif"
                                                width="100" height="100" title="CompCard1"/>
                <h:selectBooleanCheckbox value="#{agencyEditBean.compCardTemplateMap[2]}"/>
                 <h:graphicImage id="compCard2" url="/images/compcard/CompCard2.gif"
                                                width="100" height="100" title="CompCard2"/>
                <h:selectBooleanCheckbox value="#{agencyEditBean.compCardTemplateMap[3]}"/>
                 <h:graphicImage id="compCard3" url="/images/compcard/CompCard3.gif"
                                                width="100" height="100" title="CompCard3"/>
                <br/>
                <h:selectBooleanCheckbox value="#{agencyEditBean.compCardTemplateMap[4]}"/>
                 <h:graphicImage id="compCard4" url="/images/compcard/CompCard4.gif"
                                                width="100" height="100" title="CompCard4"/>
                <h:selectBooleanCheckbox value="#{agencyEditBean.compCardTemplateMap[5]}"/>
                 <h:graphicImage id="compCard5" url="/images/compcard/CompCard5.gif"
                                                width="100" height="100" title="CompCard5"/>
            </a4j:region>
           
        </h:panelGroup>

</h:panelGrid>

开发时为了省事,已经习惯了copy,不过今天的这个copy却让我郁闷了整整一天,还是不仔细啊


我测试上面reRender时,页面总是不刷新。我也是最近项目才开始使用JSF,没用系统的学习过,全是照猫画虎的用,可是 reRender我在很多场合都用过了,为什么在这却失效呢,后台action也已经执行,就是前台不刷新,反复修改测试,全部无效,最后在绝望的时候,突然发现 <a4j:region renderRegionOnly="true"> ,才明白原因,真郁闷啊,这是我从上面一个fileds中copy过来的的。去掉renderRegionOnly="true",一切OK!

PS:<a4j:region renderRegionOnly="true">在验证单个字段时,还是挺好用的。哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值