9

我想通过 Facelets 中的链接调用一种方法:

我的 Facelets 代码如下:

<h:commandButton value="A" actionListener="#{customerData.searchedCustomerListA}" />

<h:commandLink value="A" actionListener="#{customerData.searchedCustomerListA}"/>

支持 bean 代码如下:

public void searchedCustomerListA(ActionEvent ae){
    customerName = "A";
    leftCustomerListAvailable.clear();
    if(customerDataBean.getSearchedCustomerList(customerName)!= null)
        leftCustomerListAvailable =customerDataBean.getSearchedCustomerList("A");
}

相同的代码适用于<h:commandButton>但不适用于<h:commandLink>. 这是如何引起的,我该如何解决?

4

3 回答 3

3

<h:commandLink>和之间的技术区别在于<h:commandButton>链接使用 JavaScript 提交父表单。因此,如果在语法等效的按钮正常工作时它不起作用,那么这只能意味着 JavaScript 在浏览器中被禁用,或者jsf.js包含强制帮助函数的文件不包含在页面中(你应该很容易拥有通过在浏览器内置开发人员工具集的 JS 控制台中看到 JS 错误而注意到)。

因此,要解决此问题,您需要验证是否在浏览器中启用了 JS,并且您的模板中有一个<h:head>组件而不是纯 HTML <head>,以便 JSF 能够自动包含该jsf.js文件。

或者,如果您的应用程序的业务需求要求应用程序在禁用 JS 的情况下按设计运行,那么您应该坚持<h:commandButton>并添加一些 CSS 使其看起来像一个链接(例如,删除背景、填充、边框、插图等)。

于 2013-03-14T11:42:36.933 回答
0

我的情况是这个问题的原因是配置不当的 url 重写过滤器。无意匹配的过滤器模式之一http://localhost:8080/mysite/javax.faces.resource/jsf.js.xhtml?ln=javax.faces阻止了 jsf.js 被加载。检查这个答案:单击 h:commandLink 会导致 Uncaught ReferenceError: mojarra is not defined

于 2013-09-26T06:54:54.577 回答
0

试试这个,这个灵魂的工作。

    <html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<h:form>

    <h:commandLink type="button" action="#{testBean.tsetLink}"> 
          <h:outputText value="A" />
    </h:commandLink>

</h:form>
</html>

托管豆

@ManagedBean
@RequestScoped
public class TestBean {

    public void tsetLink(){
    System.out.println("Link clicked!!!!!!!!!!!!");
    }
} 
于 2013-03-14T10:40:17.367 回答