Рассмотрим следующий фрагмент класса HtmlBasicRenderer
:
Map<String, String> requestMap =
context.getExternalContext().getRequestParameterMap();
// Don't overwrite the value unless you have to!
String newValue = requestMap.get(clientId);
if (newValue != null) {
setSubmittedValue(component, newValue);
if (logger.isLoggable(Level.FINE)) {
logger.log(Level.FINE,
"new value after decoding {0}",
newValue);
}
}
Фрагмент отображается в методе decode(FacesContext context, UIComponent component)
, который отвечает за извлечение параметров запроса и их назначение компонентам на этапе запроса запроса.
Мой вопрос о том, как генерируется этот параметр запроса? Если у нас есть простая html
-форма и стандартные html input
внутри нее, вот так:
<form method="POST">
<input name="name" value="value" />
</form>
мы получим пару параметров name=value
.
Таким образом, единственный способ указать параметр запроса key для компонента, который мы пишем, — указать атрибут name
элемента в методе encode
его средства визуализации. . Как только мы это сделали, мы можем получить доступ к соответствующему параметру из метода декодирования.
Обновление: Я пишу компонент, унаследованный от UISelectOne
, но выбранный элемент может содержать больше одного поля ввода (два в конкретном случае). Его объявление будет выглядеть примерно так (детали показались неважными и были опущены):
<stcomutil:selectOne key="#{myBean.key}" value="#{myBean.value}">
<stcomutil:selectOneItem />
<stcomutil:selectOneItem />
<stcomutil:selectOneItem />
</stcomutil:selectOne>
Где <stcomutil:selectOneItem />
отображается как два input type="text"
:
^ ^
| |
| |
the key field the value field
Итак, на самом деле у меня будет 3 строки таких входов, и мне нужно обработать единственную строку, введенную пользователем. Опять же, я опускаю детали с отключением входов и так далее.
Что я хочу узнать: чтобы обработать ввод дополнительных значений (преобразование, проверка, обновление и т. д.), мне просто нужно указать атрибут имени для этого дополнительного ввода, а затем извлечь его на этапе запроса Apply, верно? Кроме того, на этапе обновления модели я должен явно извлечь объект ValueExpression
для этой привязки с помощью getValueExpression
и присвоить ему значение с помощью метода setValue
.
componentType
). Это то, что вы имели в виду? - person user3663882   schedule 09.08.2015