Идентификаторам клиента JSF предшествует идентификатор клиента родительских UINamingContainer
компонентов (например, h:form
, h:dataTable
, f:subview
). Если вы проверите сгенерированный источник HTML в своем веб-браузере (щелкните правой кнопкой мыши, просмотрите исходный код), то вы должны увидеть их. id
и name
сгенерированных элементов ввода предваряются id
родительской формы. Вам нужно использовать то же имя, что и ключ в карте параметров. Поскольку символ-разделитель, двоеточие :
, является недопустимым символом в EL, для их извлечения необходимо использовать фигурную скобку param['foo:bar']
.
<f:view>
<h:form id="account">
<div>
<label>Id</label>
<h:inputText id="id" />
</div>
<div>
<label>Amount</label>
<h:inputText id="amount" />
</div>
<h:commandButton value="Withdraw"
action="#{accountService.withdraw(param['account:id'], param['account:amount'])}"/>
</h:form>
</f:view>
Без параметров метода, подобного Seam-EL (вы, очевидно, не хотите / не имеете его), вы также можете получить к ним доступ в карте параметров запроса, используя идентификаторы клиента в качестве ключей:
public void withDraw() {
Map<String, String> map = FacesContext.getCurrentInstance().getRequestParameterMap();
String id = map.get("account:id");
String amount = map.get("account:amount");
// ...
}
Нет необходимости говорить, что это противно. Просто сделайте это обычным способом JSF, свяжите значения со свойствами bean.
Редактировать: согласно последнему отредактированному вопросу:
Таким образом, вопрос заключается в следующем: как извлечь значение компонента <h:inputText
JSF с помощью языка выражений?
На это уже отвечали раньше. Используйте имя , сгенерированное JSF , в качестве имени параметра. Обычно это шаблон formId:inputId
, где formId
- это id
родительского компонента UIForm
, а inputId
- это id
компонента UIInput
. Проверьте сгенерированный вывод HTML на точное имя сгенерированного поля <input type="text">
. Чтобы получить значение параметра, используйте скобку ['name']
, потому что нельзя использовать двоеточие :
в EL, как в ${param.formId:inputId}
.
Таким образом:
#{param['formId:inputId']}