JSF проходные элементы jsf:action функция javascript

Я использую 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, должен быть правильным. Я проверил вывод DOM.

Я также попытался вызвать функцию щелчка в коде JS. Это не сработало. Либо попробовал HTML-клик, но этот стирает событие клика Мохарры (jsf:action). Я нашел еще один ответ на этом форуме

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>

Back Bean

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>

Это также не сработало для меня в новом и чистом проекте.

1 ответ

В базовом HTML onclick Атрибут должен представлять выражение JavaScript. Однако вы указали только имя функции. Это вызывает проблему JS. Это как если бы вы делали

<script>clickHome;</script>

Добавьте скобки, чтобы сделать его истинным выражением:

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

Это не проблема, связанная с JSF. У вас возникла бы точно такая же проблема, если бы вы попробовали то же самое в базовом HTML.

<a ... onclick="clickHome">

Смотрите также сгенерированный JSF HTML-вывод через правый клик, View Source в веб-браузере. В будущих вопросах попробуйте сделать то же самое в базовом HTML. JSF в контексте этого вопроса "просто" генератор кода HTML. Ответственность за то, что он генерирует правильный HTML-код, лежит на вас самих.

Другие вопросы по тегам