не удается получить доступ к богатым компонентам в Java script с помощью #{rich: component (Id)} или RichFaces.$(Идентификатор)


Новичок в javascript здесь. Пытаясь получить доступ к внутренним компонентам RichFaces с примерами, которые я нахожу в интернете, без особого успеха.

RichFaces 3.3 и JSF 1.2, сервер jboss, Chrome, ant.

Я видел такие примеры, как

#{rich:component(formId)}
RichFaces.$(stHourId)
Но ни то, ни другое не распознается при исполнении. Так как же я могу использовать их или получить к ним доступ иным образом ...
  • разве они не доступны в RichFaces 3.3 ? Если нет, то есть ли способ сделать пример ниже в 3.3?
  • Нужно ли мне что-то особенное в моем файле xhtml, чтобы иметь возможность использовать их, или в интернете.xml или faces-config.xml или ?

ВОТ КОНКРЕТНЫЙ ПРИМЕР:

Доступ к списку значений rich: comboBox в javascript-нашел пример в интернете

var valueArray = #{rich:component(formId)}.comboList.itemsValue;

Я получаю ошибку при загрузке страницы: Uncaught SyntaxError: Unexpected token . Когда я смотрю на код в консоли разработчика, компонент #{rich: component (formid)} полностью отсутствует (что вызывает другие проблемы)

var valueArray = .comboList.itemsValue;

Если я удалю эту строку, но сломаю код, и попытаюсь вручную использовать #{rich:component...} в консоли,

#{rich:component('form:recurStartMincomboboxField')}

Я получаю: Uncaught SyntaxError: Unexpected token ILLEGAL или

RichFaces.$('form:recurStartMincomboboxField')

Другая ошибка: Uncaught TypeError: RichFaces.$ - это не функция

Я знаю, что идентификатор формы правильный, так как следующие работы, но я не могу получить доступ к списку значений из этого

document.getElementById('form:recurStartMincomboboxField')

И если вы хотите увидеть его в контексте, соответствующие части:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"> 

<head>    
    <script>         
        function checkMinute(formId, defaultVal) {
            alert('validateMinute');

            var minuteStr = document.getElementById(formId).value;

            // get list of values allowed for the combobox
            var valueArray = #{rich:component(formId)}.comboList.itemsValue;      
        }
    </script>
</head>

<body> 
    <h:form id="form">

    ......

        <rich:comboBox id="recurStartMin" value="#{filterManagerBean.recurStartMin}" required="false" 
                       selectFirstOnUpdate="true" defaultLabel="" enableManualInput="true" width="50"
                       onchange="checkMinute('form:recurStartMincomboboxField', '00')"
                       > 
             <f:selectItems value="#{filterManagerBean.minuteOptions}" />
        </rich:comboBox>

    ......

    </h:form>
</body> 

</html>

Пробовал разные вещи и искал весь день, довольно разочарованный : (

2 3

2 ответа:

#{rich:component('recurStartMincomboboxField')}

Это язык выражений (EL), а не JavaScript, см. учебник .

Вы не можете выполнить EL на стороне клиента, так как это для работы с сервером (это вроде встроенного кода Java). Выражения EL выполняются по мере загрузки страницы, поэтому, если вы хотите использовать его, вы должны знать идентификатор заранее, или идентификатор должен быть доступен на сервере. Или вы можете использовать чистый JavaScript:

document.getElementById('form:recurStartMincomboboxField').component

RichFaces.$ отсутствует в RichFaces 3.

Вам не хватает facelets, добавьте

    xmlns:ui="http://java.sun.com/jsf/facelets"

Пример комбинированных полей

Этотрасширенный пример показывает использование jQuery и val() в работе с этим. Как и в случае с чем-то очень новым, учебники используют именно данные и детали в примерах, чтобы сгладить мелкие проблемы.