Я строю на решении BalusC для выделения и фокусировки полей в JSF.Мой план - вывести массив JSON с идентификаторами, а затем вызвать метод, который будет обрабатывать этот массив.Это прекрасно работает, когда я не использую
Вот мое решение для прослушивания фазы:
public void beforePhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
List<String> highlightFields = new ArrayList<String>();
Iterator<String> highlightFieldsItr = facesContext
.getClientIdsWithMessages();
while (highlightFieldsItr.hasNext()) {
StringBuilder sb = new StringBuilder();
sb.append("#");
sb.append(highlightFieldsItr.next().replaceAll(":", "\\\\:"));
highlightFields.add(sb.toString());
}
JSONArray jsonHighlightFields = new JSONArray(highlightFields);
facesContext.getExternalContext().getRequestMap()
.put("errorFields", jsonHighlightFields.toString());
}
В основном это приведет к значению errorFields с чем-то вроде ["#some \: id1", "#some \ id2"].Затем я могу сделать что-то подобное в моем корневом файле макета:
<script>
var errorFields = ${errorFields}; // This will xlate to ["#some\\:id1", "#some\\:id2"
$(document).ready(function(){
processInputErrors(errorFields);
});
</script>
С помощью функции processInputErrors:
function processInputErrors(ids) {
for (id in ids) {
if (focus == false) {
jQuery(ids[id]).focus();
focus = true;
}
jQuery(ids[id]).addClass('input-error');
}
}
Однако мне нужно каким-то образом получить этот список в функциикоторый вызывается при успешном завершении сообщения ajax.
Теперь f: ajax имеет атрибут onevent, и эта функция вызывается, но я не уверен, что именно он передается.Как бы я мог как-то передать недействительные идентификаторы от слушателя фазы этой функции?Кажется, передан объект, который представляет HTMLInputElement?
<f:ajax event="change" onevent="test" render="test test_msg" immediate="true" />
Рад слышать об альтернативных предложениях или идеях.Цель состоит в том, чтобы сфокусировать и выделить поля, которые являются недопустимыми не только для полного постбека, но и при использовании f: ajax.
Спасибо!