加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

jsf – 仅在第二次点击时调用操作

发布时间:2020-12-16 03:05:58 所属栏目:百科 来源:网络整理
导读:我想提交一个按钮点击的数据表,但该操作在第一次单击时不会被调用.这是我的代码: h:panelGrid id="addToThisDepartmentPanel" h:outputText value="#{messageDataBean.message}" rendered="#{messageDataBean.isSuccess eq false}" style="color:red" id="a
我想提交一个按钮点击的数据表,但该操作在第一次单击时不会被调用.这是我的代码:
<h:panelGrid id="addToThisDepartmentPanel">
    <h:outputText value="#{messageDataBean.message}" rendered="#{messageDataBean.isSuccess eq false}" style="color:red" id="addToThisDepartmentMessage"/>
    <h:form>
        <h:dataTable value="#{systemResultViewUtil.systemUserDetailDataBeansList}" var="departmentdetail" id="addToThisDepartmentDataTable" rendered="#{systemResultViewUtil.systemUserDetailDataBeansList.size() gt 0}">
            <h:column>
               <f:facet name="header">
                   Name
               </f:facet>
               <h:outputText value="#{departmentdetail.name}" style="text-align: left;padding-right: 120px" />
            </h:column>
            <h:column>
                <f:facet name="header">
                    Current Department
                </f:facet>
                <h:outputText value="#{departmentdetail.depName}" style="text-align: left;padding-right: 120px" />
            </h:column>
            <h:column>
                <f:facet name="header">
                    Add To This
                </f:facet>
                <h:selectBooleanCheckbox value="#{departmentdetail.cheked}" style="text-align: left;padding-right: 120px"/>
            </h:column>
         </h:dataTable>

         <a4j:commandButton oncomplete="if(#{messageDataBean.isSuccess eq true}){ closeAddToThisDepartmentDialog()}" value="Add TO This Department" action="#{departmentServiceBean.addEmployeeToThisDepartment}" id="addToThisDepartmentButton"
                                                       render=":addToThisDepartmentMessage :message" execute=":addToThisDepartmentDataTable" />
     </h:form>
</h:panelGrid>

问题是,在第二次点击我的< a4j:commandButton>调用动作.但是在第一次点击时不会调用它.
有任何想法吗?

这个问题被称为 JSF spec issue 790.如果ajax渲染一些内容,而这些内容又包含< h:form>,那么它的视图状态将会丢失,这导致该表单中的第一个动作不会调用任何东西.在第一个动作的ajax响应中,表单将获得新的视图状态,因此任何后续操作都将成功.

这是为即将到来的JSF 2.2修正的.但是现在用JSF 2.0 / 2.1,你必须引入一个解决方法.你首先需要给出< h:form>一个固定的ID是yourFormId在下面的例子中:

<h:panelGrid id="addToThisDepartmentPanel">
    ...
    <h:form id="yourFormId">
        ...

那么你还需要在render属性中引用它:

<f:ajax ... render=":addToThisDepartmentPanel :yourFormId" />

同样的故事也适用于< a4j:xxx>组件.

<a4j:commandButton ... render=":addToThisDepartmentPanel :yourFormId" />

也可以看看:

> h:commandButton/h:commandLink does not work on first click,works only on second click
> Communication in JSF 2.0 – Ajax rendering of content which contains another form

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读