#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 на стороне сервера.
В качестве альтернативы вы могли бы использовать скрытое поле ввода, связанное с атрибутом в вашем компоненте.