操作方法不JSF

问题描述:

称为这是我的第一阶段监听操作方法不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; 
}} 

在我的网页命令按钮的点击,我称之为操作方法,并做一些处理,但操作方法是不是在全称为,但在服务器日志中,我可以看到由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> 

我从this answer举例:

每当UICommand组件未能调用相关联的动作,验证以下内容:

  1. UICommand部件必须放在一个UIForm组件内(例如h:form )。
  2. 您不能嵌套多个UIForm组件彼此(注意包含文件!)。
  3. 应该没有发生验证/转换错误(使用h:messages来获取它们全部)。
  4. 如果UICommand组分置于一个UIData组件内,确保完全一样DataModel被保留(在后面的UIDatavalue属性对象)。
  5. rendereddisabled组件的属性和所有父组件在应用请求值阶段不应评估为false
  6. 请确保请求 - 响应链中没有PhaseListener或任何EventListener已将JSF生命周期更改为跳过调用操作阶段。
  7. 请确保在同一请求 - 响应链中没有FilterServlet以某种方式阻止了对FacesServlet的请求。

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

+1

@gekrish在大多数情况下,我也一样。如果一个视图参数被松散地保存在请求作用域变量中,就会很快发生,如:''f:param'的一个可选的flash-scope会很好。否则,我总是将它保存在视图范围的bean中。 – djmj 2013-09-08 14:10:10

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

+0

请解释'immediate =“true”'如何克服没有它的错误。发生错误的原因是什么? – 2018-01-03 11:38:52

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