在JSF中不调用action方法

时间:2010-06-15 08:55:12

标签: jsf

这是我的阶段监听器

public class AdminPhaseListener implements PhaseListener {

private static final long serialVersionUID = -1161541721597667238L;

    public void afterPhase(PhaseEvent e) {
        System.out.println("after Phase " + e.getPhaseId());
    }

    public void beforePhase(PhaseEvent e) {
        System.out.println("before Phase " + e.getPhaseId());
        if(e.getPhaseId()== PhaseId.RESTORE_VIEW)
        {

        }

    }

    public PhaseId getPhaseId() {
        return PhaseId.ANY_PHASE;
    }
}

单击我页面中的命令按钮,我调用一个操作方法并进行一些处理但是根本没有调用action方法,但是在服务器日志中,我可以看到我的PhaseListener打印的所有消息阶段。

如果我的视图没有改变,它会在RESTORE_VIEW阶段之后停止吗?

任何想法?

添加如何显示命令按钮的代码:

<table width="100%">
    <h:column rendered="#{adminBean.displayResultsSize > 0}">

        <tr>
            <td colspan="14" height="5" nowrap="nowrap" class="WhiteRow"></td>
        </tr>
        <tr>
            <td colspan="14" height="1" nowrap="nowrap" align="center"
                bgcolor="#999999"></td>

        </tr>
        <h:inputHidden  id="removeUserId" value="#{adminBean.removeUserId}"/>
        <h:inputHidden  id="removeIBD" value="#{adminBean.removeIBD}"/>
        <h:inputHidden  id="removeAPA" value="#{adminBean.removeAPA}"/>
        <tr>
            <td colspan="14" height="30" nowrap="nowrap"
                class="FilterColumnGrayHeader" align="center">&nbsp;&nbsp;&nbsp;
            <input type="button" disabled="disabled" id="button_edit"
                value="Edit Details" class="disabledfield"
                onclick="populateEditRow();">
            </input> <h:commandButton type="submit" class="disabledfield" immediate="true"
                id="button_remove" value="Remove" onclick="populateRemoveRow();" action="#{adminBean.remove}">
            </h:commandButton> &#160;

            </td>
        </tr>
        <tr bgcolor="#000000">
            <td colspan="14" height="1" nowrap="nowrap" align="center"
                bgcolor="#999999"></td>
        </tr>
        <tr>
            <td height="10"></td>
        </tr>
    </h:column>
</table>

3 个答案:

答案 0 :(得分:33)

我引用了this answer

  

每当UICommand组件无法调用相关操作时,请验证以下内容:

     
      
  1. UICommand个组件必须放在UIForm组件内(例如h:form)。
  2.   
  3. 您不能嵌套彼此的多个UIForm组件(请注意包含文件!)。
  4.   
  5. 不应该发生任何验证/转换错误(使用h:messages来完成所有操作)。
  6.   
  7. 如果UICommand组件放置在UIData组件中,请确保DataModelUIData的{​​{1}}属性后面的对象完全相同)保留下来。
  8.   
  9. 在应用请求值阶段,组件的valuerendered属性以及所有父组件不应评估为disabled
  10.   
  11. 请确保请求 - 响应链中没有false或任何PhaseListener更改了JSF生命周期以跳过调用操作阶段。
  12.   
  13. 请确保同一请求 - 响应链中没有EventListenerFilter以某种方式阻止Servlet的请求。
  14.   

另一个原因可能是您没有运行您认为正在运行的代码。

答案 1 :(得分:5)

这通常意味着页面上存在验证错误。尝试设置immediate="true"以克服错误,或使用<h:messages>显示出现的错误。

答案 2 :(得分:0)

检查是否在组件的任何设置器上生成错误。