我建立在BalusC's solution上,突出顯示並集中了JSF中的字段。我的計劃是用ID輸出一個JSON數組,然後調用一個方法來處理這個數組。當我不使用< F該工作正常:AJAX/>JSF字段突出顯示ajax帖子?
這裏是我的階段偵聽解決方案:
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屬性,這個函數確實被調用,但我不確定它傳遞的是什麼。我怎麼能夠以某種方式將來自階段偵聽器的無效ID傳遞給此函數?它似乎傳遞了一個代表HTMLInputElement的對象?
<f:ajax event="change" onevent="test" render="test test_msg" immediate="true" />
很高興聽到其他建議或想法。目標基本上是集中並突出顯示不僅在完整的回傳中而且在使用f:ajax時無效的字段。
謝謝!
我看到從阿賈克斯後的XML響應具有將剛剛執行的 標籤。我將如何能夠在迴應中插入一些JavaScript?似乎規範支持它,但不知道我會如何實現它。 –
當使用複合組件時,如果'panelGroup'存在於組件的cc:implementation'之外,那麼就無法找到'focus' id屬性。如果有辦法讓複合組件引用id屬性,那麼支持這個答案的例子將是最有幫助的。 –