h:commandButton在ui中的动作:片段有时不做动作

  • 本文关键字:片段 commandButton ui jsf jsf-2
  • 更新时间 :
  • 英文 :


使用JSF 2.1

我们有一个封装搜索结果块的表单。每个块都有一个"Delete"按钮,该按钮与View作用域的后台对话并删除块(从Session作用域bean中)。

看起来像这样:

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

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

。下面的delete实现可以正常工作:

<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>

faces-redirect=true起作用的原因是表单中的DOM组件与服务器表示相匹配。JQuery对话框呈现在页面底部的表单外部。通过渲染equal @all解决了这个问题。另一个解决方案是在表单中呈现对话框。

最新更新