我想提交一个按钮点击的数据表,但该操作在第一次单击时不会被调用.这是我的代码:
<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

jsf – 仅在第二次点击时调用操作的更多相关文章

  1. Prime Faces错误消息以不同的样式显示

    我正在使用JSF2.3Mojarra和PrimeFaces7开发一个基于web的应用程序。我的问题是错误消息,我将其定义为根据我当前显示的页面,以不同的样式播种。我怀疑这是由于我使用的某些自定义样式,但我不确定。我有以下情况:1.)显示两条消息,其中一条消息在显示后不久消失。这一次,其中一个文本为白色,背景为红色,而另一个文本则为红色,背景为白色:3.)而且,我还有两个案例3a中。有没有一种方法可以像中的情况那样显示所有消息?

  2. 正则表达式 – 使用JSF 2/PrimeFaces中的正则表达式进行电子邮件验证

    我有一个输入字段采用电子邮件地址:如何使用JSF2/PrimeFaces中的正则表达式将输入的值验证为有效的电子邮件地址?

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

    我想提交一个按钮点击的数据表,但该操作在第一次单击时不会被调用.这是我的代码:问题是,在第二次点击我的调用动作.但是在第一次点击时不会调用它.有任何想法吗?

  4. 使用AJAX的JSF表单帖子

    我希望以下表单使用AJAX.因此,在单击命令按钮并且不重新加载页面后,将显示注释.使用JavaServerFaces2.0需要更改什么?

  5. 使用AJAX更新JSF / Primefaces数据表中的单行

    使用AJAX时,如何更新p:datatable中的单行?我不想更新整个数据表,因为它有很多行,而且需要一些时间.我的布局:我尝试了一些像update=“clearance”等的东西,但它似乎没有用.我正在使用JSF2.1和Primefaces5.2您可以使用@row搜索表达式来实现这一点–它会更新表中的第n行.要更新当前行,您需要将行索引作为参数传递.在上设置rowIndexVar=“rowIdx”属性接着:

  6. jsf – 如何通过ajax验证两个密码字段?

    首先,使用真实的Validator验证输入.不要在动作事件方法中执行.对于你的具体问题,你只需要指定的执行属性中的两个字段,它只默认为当前组件.如果您将验证器附加到第一个输入,并将第二个输入的值作为

  7. jsf – 级联p:未设置selectOneMenu模型值

    .编辑:面-配置如果托管bean被@RequestScoped放置在请求范围内,则会发生这种情况.每个HTTP请求都会创建一个全新的bean实例,所有属性都设置为default.这样list变为空,因此在模型中没有设置值.通过@ViewScoped将bean放在视图范围中应该可以解决这个问题.也可以看看:>Howtochoosetherightbeanscope?

  8. JSF 2.0 AJAX:使用jsf.ajax.request(或其他方法)从javascript调用bean方法

    一些背景:我正在构建一个自定义的JSF组件.该组件基本上是一个文本编辑器,它应该有一个“保存”按钮来保存编辑器的内容字符串.当我使用CodeMirror库时,我需要使用javascript从编辑器中获取内容(字符串),并将其发送到服务器.因此,在这种情况下,我不能使用基于XML的JS调用,如f:ajax.问题:我打算用jsf.ajax.request发送字符串,但是它并不直接支持调用bean的方法.如何使用JSF以AJAX的方式调用bean中的方法?

  9. 在制作JSF Ajax请求时显示加载进度

    提出请求时,如何显示一些加载消息?

  10. JSF动态包括使用Ajax请求

    3在JSF2中,是否可以更改ui的src的值:使用Ajax请求动态地包含?谢谢.这就是我现在所拥有的是否可以使它成为Ajax?

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部