richfaces a4j:支持事件意外调用后端方法

时间:2012-07-11 14:10:48

标签: richfaces jsf-1.2 ajax4jsf richfaces-modal

我使用Richfaces 3.3处理JSF 1.2应用程序。我有一个包含rich:extendedDataTable的弹出窗口。当我单击表格中的一行时,我想启用或禁用按钮,我使用a4j:support event="onRowClick"

以下是一些代码:

<h:form>
    <rich:panel id="main">
        <a4j:commandButton id="completed" value="Completed" 
        rendered="#{bean.completedCase}" />

        <a4j:commandButton  value="Open"
                oncomplete="#{rich:component('popupId')}.show(...)">
        </a4j:commandButton>

        <rich:modalPanel id="popupId">
            <a4j:region>

                <rich:extendedDataTable id="source" value="#{bean.sourceItems}" 
                    var="sourceItem" selectionMode="single" >
                    <a4j:support event="onRowClick" eventsQueue="pickQueue" reRender="copy" >
                        <f:setPropertyActionListener value="#{sourceItem}"
                            target="#{bean.sourceSelection}" />
                    </a4j:support>
                    ....
                </rich:extendedDataTable>           

                <a4j:commandButton id="copy" value="Copy" />
            </a4j:region>

            <a4j:commandButton value="Ok" reRender="completed"
                    oncomplete="#{rich:component('popupId')}.hide();return false;">
            </a4j:commandButton>

        </rich:modalPanel>
    </rich:panel>
</h:form>

问题是,当我单击一行时,然后在后端调用一些用于呈现按钮的方法:rendered="#{bean.completedCase}",但按钮不在弹出窗口上,而是在超出页面的页面上弹出。知道为什么有其他方法被称为用于表格的方法吗?

2 个答案:

答案 0 :(得分:0)

尝试在ajaxsingle="true"标记上使用a4j:support。由于您在onrowclick触发请求时使用h:form,因此在更新模型阶段,将在服务器上处理h:表单中的所有组件。

希望这会有所帮助。

答案 1 :(得分:0)

不建议嵌套<h:form>但我们可以有多个<h:form> s,请尝试 修改代码的方式是<h:commandButton>在一个h:form中,而<h:modalPanel>是另一种形式

希望这会有所帮助。你也可以试试<a4j:form>

modalPanel