我写了以下代码,
<h:form id="PrefForm" >
<hx:commandExButton id="preferenceButton" type="button" style="align:right;" value="#{nls.preferenceLink }" title="#{nls.preferenceLinkTitle}" >
<hx:behavior event="onclick" behaviorAction="get" targetAction="prefPanelGroup"></hx:behavior>
<hx:behavior event="onclick" behaviorAction="show;stop" targetAction="preferenceSet"></hx:behavior>
</hx:commandExButton>
<hx:panelDialog id="preferenceSet" type="modal" styleClass="panelDialog" title="#{nls.preferenceDialogTitle}" >
<h:outputText styleClass="panelStartMessage" style="display:block;" value="#{nls.preferenceDialogWindowText}" />
<h:panelGroup id="prefPanelGroup" rendered="#{neoReport.hasSelectItem }" style="display:block;width:300px;height:360px;overflow:auto;" >
<hx:ajaxRefreshRequest id="refreshform" />
<h:selectManyCheckbox value="#{neoReport.selectedItems}" layout="pageDirection">
<f:selectItems value="#{neoReport.selectItems}" />
</h:selectManyCheckbox>
</h:panelGroup>
<hx:panelBox id="noCommandWindow" rendered="#{!neoReport.hasSelectItem }" style="display:block;width:300px;height:50px;" layout="lineDirection">
<h:outputText styleClass="outputText" id="cmdInfo" value="#{nls.noCommands}" />
</hx:panelBox>
<h:panelGroup id="buttonBox1" styleClass="panelStartBox" >
<hx:commandExButton id="submitPref" styleClass="commandExButton" type="submit" value="#{nls.submit}" action="#{neoReport.action}">
<hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet" id="behaviorSubmitPref" />
</hx:commandExButton>
<hx:commandExButton id="CancelPref" styleClass="commandExButton" type="submit" value="#{nls.cancel}" action="neoReport">
<hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet" id="behaviorCancelPref" />
</hx:commandExButton>
</h:panelGroup>
</hx:panelDialog>
</h:form>
此代码背后的基本思想是在页面上有一个按钮,当用户单击时,它应该从bean获取最新数据(通过提取一个不断更新的文件)并填充databean中的List对象,这样那个h:selectManyCheckBox可以渲染它。所以我使用commandExButton添加了一个行为,这样它就会获得新数据,它应该在selectManyCheckBox中呈现最新的选项。但是出于这两个hx:行为,只有第一个正在运行,它调用
的getter函数<f:selectItems value="#{neoReport.selectItems}"
但它没有进一步渲染panelDialog。如果我删除“get”的行为,它将显示面板对话框,但不显示更新的数据。所以我无法找到,我在这里做了什么错误。任何人都可以帮忙吗?
答案 0 :(得分:0)
首先,我不知道这是什么类型的标签库。你应该在标签和/或问题中指出它。
您应该只有一个<hx:behavior>
标记,可以为您完成所有工作。如果这样做,你应该有一个调用所有三种方法的方法。这些标签是否可以使用AJAX重新渲染多个组件 - 如targetAction="prefPanelGroup, preferenceSet"
?
据我所知,重新渲染preferenceSet
也会导致prefPanelGroup
重新投降,所以单独重新渲染是毫无意义的。
此外,重新渲染prefPanelGroup
只会告诉<hx:behavior>
标记更精确的ID,例如"PrefForm:prefPanelGroup"
。
希望这有帮助, 丹尼尔