Запуск метода управляемого компонента jsf из javascript

#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) с нужными вам параметрами.