Я изучал, как разрабатывать пользовательские компоненты JSF, чтобы улучшить мои знания о том, как это работает (до сих пор это было довольно интересно).Как декодировать действие commandButton
Я сделал свой собственный commandButton (расширенный от HtmlCommandButton), и он работал, как ожидалось, при выполнении всего декодирования и регистрации в классе компонентов.
Когда я решил создать средство визуализации разделенных лиц для моего компонента, он перестает работать. После некоторого исследования я узнал, что мне пришлось переопределить метод декодирования моего средства визуализации, и он работал только потому, что этот метод уже был реализован HtmlCommandButton.
После некоторых исследований я узнал, как декодировать прослушиватели действий (thanks to BalusC), и я также узнал, как декодировать события ajax. Однако я до сих пор не знал, как декодировать действия.
Это мой метод декодирования прямо сейчас:
@Override
public void decode(FacesContext context, UIComponent component) {
CommandButtonUI commandButton = (CommandButtonUI) component;
//decode click ajax events
List<ClientBehavior> clientBehaviours = commandButton.getClientBehaviors().get("click");
if (clientBehaviours != null) {
for (ClientBehavior cb : clientBehaviours) {
cb.decode(context, component);
}
}
//decode action listenet
if (context.getExternalContext().getRequestParameterMap().containsKey(commandButton.getClientId(context))) {
component.queueEvent(new ActionEvent(component));
}
}
Я уже пытался найти источник декодирования HtmlCommandButton и анализировать его, но я не смог найти его, так как, видимо, это генерируется плагином.
Я стараюсь понять его (кажется, просто поэтапно следует, что указано в документации рендеринга для поведения декодирования), но это сработало для меня. Благодарю. ^^ –