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">在验证单个字段时,还是挺好用的。哈