0

我正在使用 JSF 2.2 直通元素,我想调用这两个函数,jsf:action并且jsf:onclick. 我尝试了很多方法来做到这一点,但没有一个对我有用。

我得到的最接近的方法是这样的:

HTML

<form jsf:id="frmNavigation">    
   <a jsf:id="btnHome"  jsf:action="#{bean.action()}" jsf:onclick="clickHome">
      <f:ajax execute="@form" render="frmRedirect:frmNewHomeRedirect"/>
   </a>
   [...]
</form>

JS

  function clickHome(){
  document.getElementById("frmRedirect:frmNavigation:btnHome").addClass("metro-btn-red");

  document.getElementById("frmRedirect:frmNavigation:btnCadCli").removeClass("metro-btn-red");
  document.getElementById("frmRedirect:frmNavigation:btnModel1").removeClass("metro-btn-red");
  document.getElementById("frmRedirect:frmNavigation:btnModel2").removeClass("metro-btn-red");
}

注意我的 JS 它在 HTML 页面中,但是在外部 JS 中它没有工作。

JS 中相关的 id 似乎是正确的。我检查了 DOM 输出。

我还尝试在 JS 代码中调用 click 函数。它没有用。要么尝试了 HTML onclick,但这个删除了 Mojarra 点击事件(jsf:action)。我在这个论坛上找到了另一个anwser

http://www.coderanch.com/t/211593/JSF/java/Calling-backingBean-method-javascripthttp://www.coderanch.com/t/211593/JSF/java/Calling -backingBean-method-javascript
你猜怎么着,它没有工作太'_'。

我错过了一些我无法理解的东西。

我在想是否有办法从 JS 调用我的操作。有没有办法在不组成新元素的情况下做到这一点?

提前致谢。


更新

在新项目中尝试相同的方法:

HTML

<!DOCTYPE html >
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:jsf="http://xmlns.jcp.org/jsf"
      xmlns:f="http://xmlns.jcp.org/jsf/core">

  <head jsf:id="head">
    <title>Facelet Title</title>

    <meta charset="UTF-8"/>

    <style type="text/css">

      .btn{
        background-color: #FFF;
        border: solid 2px #303030;
        color: #303030;
      }
      .btn-red{
        background-color: #C30563;
      }
    </style>

    <script type="text/javascript">
      function clickMe() {
        document.getElementById("btn").addClass("btn-red");
      }

    </script>

  </head>
  <body jsf:id="body">

    <form jsf:id="frm" jsf:prependId="false">

     <a jsf:id="btn"  type="submit" jsf:value="Click me" jsf:action="#{cbMain.doSomething()}" jsf:onclick="clickMe()" class="btn">
       <f:ajax execute="@form" render="frmRender"/>
    </a>
    </form>
  </body>

</html>

回豆

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

@Named("cbMain")
@SessionScoped
public class TesteBean implements Serializable{

  private int i = 0;

  public void doSomething(){
    System.out.println( i++ );
  }

}

这是DOM中生成的行:

<a id="btn" href="#" onclick="jsf.util.chain(this,event,'clickMe()','mojarra.ab(this,event,\'action\',\'@form\',\'frmRender\')');return false" type="submit" class="btn">Click me</a>

在一个新的干净的项目中,它也对我不起作用。

4

1 回答 1

0

在基本 HTML 中,onclick属性必须表示 JavaScript 表达式。但是,您只指定了函数名称。这会导致 JS 问题。就好像你在做

<script>clickHome;</script>

添加括号使其成为真正的表达式:

<a ... jsf:onclick="clickHome()">

这不是与 JSF 相关的问题。在基本 HTML 中尝试相同的问题时,您会遇到完全相同的问题。

<a ... onclick="clickHome">

另请参阅通过右键单击在 webbrowser 中查看源代码的 JSF 生成的 HTML 输出。在未来的问题中,尝试在基本 HTML 中做同样的事情。JSF 在这个问题的上下文中“只是”一个 HTML 代码生成器。最终由您自己负责生成正确的 HTML 输出。

于 2015-01-23T12:43:26.527 回答