2015-01-23 5 views
0

Я использую элементы сквозной передачи JSF 2.2, и я хотел бы назвать обе функции, jsf:action и jsf:onclick. Я пробовал много способов сделать это, и никто не работал для меня.JSF passthrough elements jsf: действие javascript function

Ближайший подход, который я получил, был этот путь:

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"); 
} 

Примечание My JS это на HTML-странице, но либо во внешнем JS это не сработало.

Идентификатор, связанный с JS, является правильным. Я проверил вывод DOM.

Я также попытался вызвать функцию щелчка в JS-коде. Это не сработало. Либо попробовал HTML onclick, но этот стирает событие щелчка Mojarra (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. Есть ли способ сделать это, не создавая новый элемент?

Заранее спасибо.


Update

Попытка же самое в новом проекте:

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> 

Назад 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> 

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

ответ

0

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

<script>clickHome;</script> 

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

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

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

<a ... onclick="clickHome"> 

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

+0

Я, alredy, попробовал это, но и JS и действия JSF не работают. –

+0

Тогда проблема не видна в представленной до сих пор информации. Когда я копирую ваш код в полностью пустой проект JSF со всеми настройками по умолчанию и самыми последними версиями, то он работает только для меня после исправления ошибки в соответствии с приведенным выше ответом. И функция JS, и действие bean активируются. – BalusC