Установить f: значение параметра с помощью JavaScript

#java #javascript #jsf

#java #javascript #jsf

Вопрос:

Возможно ли это сделать:

код jsf (псевдо):

 ...
<f:param name="arg" value="document.getElementById('naming').text()">
<h:inputText id="naming"></h:inputText>
...
  

Я имею в виду подход, когда <f:param> задается с помощью JS.

Это плохая практика?

Спасибо за помощь.

Ответ №1:

Вам нужно использовать a4j commandButton и actionParam , чтобы иметь возможность передавать динамический параметр обратно на сервер.

Кроме того, вам нужен атрибут в вашем компоненте, который будет получать значение param.

Пример:

 <a4j:commandButton action="#{myBean.action}" value="Submit!">
    <a4j:actionParam name="arg" noEscape="true" value="getTheValue()" assignTo="#{myBean.myBeanArg}" />
</a4j:commandButton>
  

Здесь myBean.myBeanArg будет получено значение, возвращаемое функцией javascript getTheValue() .

Обратите внимание на noEscape="true" атрибут. Это необходимо, потому что в противном случае данные внутри value были бы заключены в одинарные кавычки и экранированы, что не привело бы к выполнению javascript. Как указано в документации:

В атрибуте «value» можно использовать выражение или функцию JavaScript. В этом случае атрибуту «noEscape» должно быть присвоено значение «true». Результат этого вызова JavaScript отправляется на сервер в виде значения <a4j:actionparam> .

Ответ №2:

<f:param> это материал на стороне сервера, в то время как javascript является клиентской стороной. Таким образом, вы не можете

Для этого можно использовать ajax a4j ,

Ответ №3:

Нет, вы не можете. Вы могли бы, например, изменить атрибут ссылки и получить этот атрибут в своем методе action на стороне сервера.

В качестве альтернативы вы могли бы использовать скрытое поле ввода, связанное с атрибутом в вашем компоненте.