有时,当使用<h:commandLink>, <h:commandButton>或<f:ajax>时,与标记相关的action, actionListener或listener方法根本没有被调用。或者,bean属性没有更新提交的UIInput值。

可能的原因和解决方法是什么?


当前回答

<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" /> <!--Working-->
    </p:dialog>
  </h:form>

  <h:form id="form2">
    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" /> <!--Not Working-->
    </p:dialog>
  </h:form>
</ui:composition>

来解决;

<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" />   <!-- Working  -->
    </p:dialog>

    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" />   <!--Working  -->
    </p:dialog>
  </h:form>
  <h:form id="form2">
    <!-- ..........  -->
  </h:form>
</ui:composition>

其他回答

如果你的h:commandLink在h:dataTable中,还有另一个原因,为什么h:commandLink可能不起作用:

绑定到h:dataTable的底层数据源也必须在单击链接时触发的第二个JSF-Lifecycle中可用。

因此,如果底层数据源是请求作用域,h:commandLink将不起作用!

我最近遇到了一个问题,在使用IBM Extended Faces Components的JSF 1.2应用程序中没有调用uiccommand。

我在数据表的一行上有一个命令按钮(扩展版本,所以<hx:datatable>), UICommand不会从表中的某些行中触发(不会触发的行是大于默认行显示大小的行)。

我有一个下拉组件,用于选择要显示的行数。支持该字段的值在RequestScope中。支持表本身的数据在某种ViewScope中(实际上,暂时在SessionScope中)。

如果通过绑定到数据表的rows属性的控件来增加行显示,那么在单击此更改后显示的任何行都不能触发UICommand。

将此属性置于与表数据本身相同的作用域中可以解决这个问题。

我认为这在上面的balusc# 4中有所暗示,但不仅表值需要为View或Session范围,而且还需要控制表上显示的行数的属性。

我想再提一点关于Primefaces的p:commandButton!

当你使用p:commandButton来执行需要在服务器上执行的操作时,你不能使用type="button",因为这是用于Push按钮的,用于执行自定义javascript,而不会向服务器发出ajax/非ajax请求。

为此,您可以免除type属性(默认值是"submit"),也可以显式地使用type="submit"。

希望这能帮助到一些人!

我有很多有趣的调试问题,其中一个<h:commandLink>的动作在richfaces数据表拒绝发射。这张桌子曾经在某个时候工作过,但没有明显的原因就停了下来。我想尽了一切办法,却发现我的rich:datatable使用了错误的rowKeyConverter,它返回了richfaces愉快地用作行键的空值。这阻止了我的<h:commandLink>动作被调用。

<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" /> <!--Working-->
    </p:dialog>
  </h:form>

  <h:form id="form2">
    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" /> <!--Not Working-->
    </p:dialog>
  </h:form>
</ui:composition>

来解决;

<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" />   <!-- Working  -->
    </p:dialog>

    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" />   <!--Working  -->
    </p:dialog>
  </h:form>
  <h:form id="form2">
    <!-- ..........  -->
  </h:form>
</ui:composition>