a4j:included rich:dataTable对a4j:commandButton有负面影响

问题描述

解决方法是安装一个Facelets罐。看这里

解决方法

我有一个JSF / RichFaces设置,index.jsp其中a4j:includes是另一段包含的代码rich:dataTable

它最初呈现良好,然后在index.jsp‘dropDown列表中选择一个项目,然后单击’Retrieve’,a4j:commandButton使用后备豆的setChosen方法在后端进行出价。支持bean更新类成员,其吸气剂然后由模型读取在一个单独的文件中的元素称为content.jspa4j:included。出现我更新的tabPanel。

我可以在eclipse控制台中看到输出。但是当我再次按下按钮时,什么也没发生。tomcat 6.0日志中没有任何内容,控制台上也没有任何内容。

EDIT1
将问题缩小到我的content.jsp文件而不是上面的index.jsp代码,我发现问题出在rich:dataTable元素上。当我从中删除此元素时content.jsp,我可以一遍又一遍地单击“检索”按钮,它会重新加载我的标签面板。一放进去,第一次单击就可以了,然后该按钮将单击,但是什么也没有发生,并且该按钮也不会取消单击。

提供rich:dataTablewith数据的方法应该至少在第一次使用时就不会令人怀疑,但它仅执行一些xpath例程并返回ArrayList<MyDataList>

有了编辑,现在任何人都可以建议如何使用rich:dataTable它,以免造成任何麻烦吗?元素在内部rich:tabPanel,内部在内,仅此h:form而已。

谢谢

EDIT2
:为响应下面的评论请求,以下是完整的受影响的代码清单,其简短程度将重现该问题。@Damo,请注意a4j:commandButton和,rich:dataTable它们位于不同的文件中,因为后者位于a4j:included
的jsp文件中。另请注意,<%@ taglib uri=...引用已从两个文件中删除。

index.jsp:

<f:loadBundle basename="messages" var="msg" />

<f:view>
    <rich:page pageTitle="MyTitle" markupType="xhtml">
    <h:outputText id="setup" value="#{MyBacking.setup}" />
        <rich:toolBar height="35" itemSeparator="line">
            <rich:toolBarGroup location="left">
                <a4j:form>
                    <a4j:outputPanel id="panel">
                        <h:outputText style="text-align: center" value="Select " />
                        <h:selectOneMenu id="nodes" value="#{MyBacking.chosen}">
                            <f:selectItems value="#{MyBacking.nodes}" />
                        </h:selectOneMenu>
                        <a4j:commandButton value="Retrieve"
                            reRender="panel,contentPanel,currNode,lastOp"
                            onclick="this.disabled=true" oncomplete="this.disabled=false" />
                    </a4j:outputPanel>
                </a4j:form>
            </rich:toolBarGroup>
        </rich:toolBar>

        <rich:panel>
            <h:panelGroup layout="block" id="contentPanel">
                <a4j:include viewId="#{MyBacking.viewId}">
                    <f:param name="targetIdParam" value="content" />
                </a4j:include>
            </h:panelGroup>
        </rich:panel>
    </rich:page>
</f:view>

a4j:included content.jsp

<h:form id="myConfig">
    <rich:tabPanel switchType="client" rendered="true">
        <rich:tab styleClass="tab" label="Connections">
            <rich:dataTable onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
                onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
                cellpadding="0" cellspacing="0" width="100%" border="0" var="item"
                value="#{MyBacking.DataList}">
                <rich:column style="text-align:center" width="150px">
                    <h:outputText styleClass="txtBold"
                        value="#{item.info}:#{item.other}" />
                </rich:column>
            </rich:dataTable>
        </rich:tab>
    </rich:tabPanel>
</h:form>

确实非常感谢您对此的关注。

EDIT3
根据要求,我尝试将封装a4j:include在内h:form。为了使包含的内容,以避免嵌套的H:形式,我取代了包围h:form在标签content.jsph:panelGrid。当我重新执行此操作时,第二次单击a4j:commandButton仍然导致挂起,但是我检查了萤火虫并POSThttp://localhost:8888/index.jsf 200 13ms发生了,但响应为空。这有帮助吗?