我一直在为这个问题摸不着头脑......我有很多带有工作 commandLink 元素的项目,但是我一辈子都无法让它在这个项目中工作。我在这里关注了 BalusC 的响应:commandButton/commandLink/ajax action/listener 方法未调用或输入值未更新到字母,但仍然没有乐趣。
目前,我已将代码简化为尽可能简单:
@ManagedBean
@SessionScoped
public class TestBean {
private @Inject transient Logger logger;
public void testEvent(ActionEvent actionEvent) {
logger.log(Level.INFO, "Event Fired!!");
return;
}
}
在我的 xhtml 文件中,我有:
<h:form>
<h:commandLink id="test" actionListener="#{testBean.testEvent}" value="Test Me!"/>
</h:form>
当我单击链接时,不会调用该方法,并且我被重定向到 web-apps 根目录(登录页面,尽管有登录过滤器:/)如果我将链接更改为 commandButton,它会按预期工作。
当前应用程序使用 ui:composition 标记进行模板化,并且我已经三次检查嵌套的 h:form 标记,我没有使用任何 ajax 调用或其他 JS 库。我的模板在重要的地方实现了 jsf 标记,例如 h:head、h:body 等。任何人都可以为我遇到的奇怪行为提供任何指示或可能的原因吗?
最后,我在我的 web 应用程序的各个页面上测试了这个 commandLink,并且 commandLink 元素通常只是拒绝调用。
如果有人感兴趣,这是我链接的编译后的 html:
<form id="j_idt26" name="j_idt26" method="post" action="/my-project/webpages/Login.xhtml" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_idt26" value="j_idt26" />
<a id="j_idt26:test" href="#" onclick="mojarra.jsfcljs(document.getElementById('j_idt26'),{'j_idt26:test':'j_idt26:test'},'');return false">Test Me!</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-109553560791909389:-730254890454894147" autocomplete="off" />
</form>