#javascript #jsf #richfaces
#javascript #jsf #richfaces
Вопрос:
Я довольно новичок в JS и столкнулся с проблемой использования управляемого компонента из javascript.
Я пытаюсь сделать это с помощью h: inputHidden, но все еще не имею правильного поведения.
<h:inputHidden id="hidden" value="#{bean.myVariable}" />
и мой скрипт
<script type="text/javascript">
function func(){
var varFromBean = document.getElementById('myForm:myVariable').value;
....
}
</script>
Я что-то делаю неправильно?
И есть другие способы определить переменную JS, запустив метод управляемого компонента?
Заранее спасибо!
Редактировать
Мне это нужно для настройки rich: calendar. Мне нужно разрешить пользователю выбирать дату из определенного периода.
<rich:calendar value="#{bean.selectedDate}"
isDayEnabled="disableDays" dayStyleClass="disabledDaysStyle"
firstWeekDay="1"/>
и полный JavaScript для этого:
<script type="text/javascript">
function disableDays(day){
var curDt = new Date();
if (curDt == undefined){
curDt = day.date.getDate;
}
var period = document.getElementById('form:period').value;
if ((curDt.getTime() period) amp;> day.date.getTime()) return true;
if (curDt.getTime() amp;< (day.date.getTime())) return true;
else return false;
}
function disabledDaysStyle(day){
if (!disableDays(day)) return 'rich-calendar-boundary-dates';
}
</script>
Ответ №1:
Чтобы получить значение управляемого компонента из скрытого ввода JSF в JS, вы можете использовать jQuery следующим образом:
Сначала используйте h:inputText вместо этого, чтобы определить класс для поиска в jQuery (‘classForSearch’). Чтобы скрыть ввод, добавьте простой CSS-класс (‘inpt-hidden’):
<style>
.inpt-hidden { display: none; }
</style>
<h:inputText value="#{bean.myVariable}" styleClass="inpt-hidden classForSearch" />
После этого вы сможете получить к нему доступ с помощью jQuery:
<script type="text/javascript">
function func(){
var varFromBean = jQuery('.classForSearch').val();
....
}
</script>
Как настроить jQuery, вы можете найти по адресу:http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery#Setup
Комментарии:
1. Я хотел бы добавить, что вы также можете присвоить h: inputText идентификатор и использовать метод jQuery для идентификатора.
2. большое спасибо, это может помочь. Но мне интересно, есть ли какой-то другой способ, кроме использования h: inputText? это кажется довольно неестественным ..?
Ответ №2:
Управляемый bean-метод не будет запускаться при попытке получить значение элемента на стороне клиента. Он просто возвращает значение, которое уже присутствует после загрузки страницы. Для запуска метода вы могли бы использовать a4j:jsFunction (или ее аналог, если вы не используете jsf 1.2) с нужными вам параметрами.