Я использую элементы сквозной передачи 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>
Он также не работал для меня в новом и чистом проекте.
Я, alredy, попробовал это, но и JS и действия JSF не работают. –
Тогда проблема не видна в представленной до сих пор информации. Когда я копирую ваш код в полностью пустой проект JSF со всеми настройками по умолчанию и самыми последними версиями, то он работает только для меня после исправления ошибки в соответствии с приведенным выше ответом. И функция JS, и действие bean активируются. – BalusC