操作方法不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">
<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>  
</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
组件未能调用相关联的动作,验证以下内容:
UICommand
部件必须放在一个UIForm
组件内(例如h:form
)。- 您不能嵌套多个
UIForm
组件彼此(注意包含文件!)。- 应该没有发生验证/转换错误(使用
h:messages
来获取它们全部)。- 如果
UICommand
组分置于一个UIData
组件内,确保完全一样DataModel
被保留(在后面的UIData
的value
属性对象)。rendered
和disabled
组件的属性和所有父组件在应用请求值阶段不应评估为false
。- 请确保请求 - 响应链中没有
PhaseListener
或任何EventListener
已将JSF生命周期更改为跳过调用操作阶段。- 请确保在同一请求 - 响应链中没有
Filter
或Servlet
以某种方式阻止了对FacesServlet
的请求。
另一个原因可能是您没有运行您认为正在运行的代码。
答
这通常意味着在页面上验证错误。尝试设置immediate="true"
来克服错误,或使用<h:messages>
来显示出现的错误。
+0
请解释'immediate =“true”'如何克服没有它的错误。发生错误的原因是什么? – 2018-01-03 11:38:52
答
检查组件的任何设置器是否生成错误。
@gekrish在大多数情况下,我也一样。如果一个视图参数被松散地保存在请求作用域变量中,就会很快发生,如:''f:param'的一个可选的flash-scope会很好。否则,我总是将它保存在视图范围的bean中。 –
djmj
2013-09-08 14:10:10