h:ui中的commandButton动作:片段有时不执行动作

时间:2014-06-19 12:13:28

标签: jsf jsf-2

使用JSF 2.1

我们有一个封装搜索结果块的表单。每个块都有一个“删除”按钮,该按钮与View范围的后端对话,并删除该块(来自会话范围的bean)。

看起来像这样:

  -- group
    -- block (delete button)
      -- search result
    -- block 
      -- search result
    ...

当删除最后一个块时,整个组都会消失。

反正。删除的以下实现工作正常:

<h:commandButton 
  styleClass="delete"
  action="#{backing.taBortFranTrafflista(sokning)}"
  value="#{backing.getText('trafflista.taBort')}"
  onclick="return confirm('#{backing.getText('FR100', sokning.sokbegrepp, backing.aktuelltAntalTraffar(sokning))}');"
  rendered="#{backing.javascriptEnabled}"
  disabled="#{commons.trafflistaLast}">
    <f:ajax render="@form" />
</h:commandButton>

但是,以下在JQuery中使用确认的实现可以工作,但不能使用最后的搜索结果,从而不会调用操作(分配给h:commandButton):

<ui:fragment rendered="#{backing.javascriptEnabled}">
  <div id="dialog#{sokning.hashCode()}" title="Ta bort" class="dialog">
    <p>#{backing.getText('FR100', sokning.sokbegrepp, backing.aktuelltAntalTraffar(sokning))}</p>
    <h:commandButton 
      styleClass="delete dialog-button"
      action="#{backing.taBortFranTrafflista(sokning)}"
      value="#{backing.getText('trafflista.taBort')}"   
      onclick="closeDialog('dialog#{sokning.hashCode()}')"              
      disabled="#{commons.trafflistaLast}">
      <f:ajax render="@form" onerror="ajaxError"/>
    </h:commandButton>
    <input 
       type="submit" 
       data="dialog#{sokning.hashCode()}" 
       class="closeDialog dialog-button" 
       value="#{backing.getText('trafflista.avbryt')}" />
  </div>
  <ui:fragment rendered="#{not commons.trafflistaLast}">
    <input 
       type="submit" 
       data="dialog#{sokning.hashCode()}" 
       class="delete showDialog" 
       value="#{backing.getText('trafflista.taBort')}" />
  </ui:fragment>
  <ui:fragment rendered="#{commons.trafflistaLast}">
    <input 
       type="submit" 
       class="delete showDialog" 
       value="#{backing.getText('trafflista.taBort')}" 
       disabled="disabled"/>
  </ui:fragment>
</ui:fragment>

1 个答案:

答案 0 :(得分:0)

原因 faces-redirect = true 的作用是表单中的DOM组件与服务器表示形式匹配。 JQuery对话框呈现在页面底部的表单之外。做一个等于 @all 的渲染解决了这个问题。另一个解决方案是在窗体内呈现对话框。