Есть ли ограничение на число вызовов ajax, которые я могу сделать в JSF?
Я занимаюсь разработкой портлета с помощью RAD 7 в среде IBM Wepsphere portal 5.1. У меня есть различные поля, которые наполняют объекты в конце с помощью вызовов ajax. Это делается для того, чтобы сохранить данные, если пользователь уходит со страницы, не отправляя их. Входные данные представляют собой комбинацию всплывающих окон и раскрывающихся списков. Когда пользователь хочет сохранить данные постоянно, они нажимают кнопку отправки.
Я заметил, что когда вы заполняете более определенного количества полей на странице, вам нужно дважды нажать кнопку "Отправить". Первая отправка, по-видимому, просто обновляет страницу, и действие, стоящее за командной кнопкой, не вызывается. Второй представляет данные.
Я провел довольно много тестов с этим и понял, что есть ограничение в 7 вызовов ajax, которые я могу сделать до того, как кнопка отправки не будет работать в первый раз. Даже если я просто изменю одно поле 8 раз, это не удастся.
Каким-то образом, пройдя 7 вызовов, страница переходит в другое состояние. Навигация от страницы исправит это. Т.е. если вы заполните все поля, перейдете на другую страницу в меню и затем вернетесь, вы сможете отправить с первого клика.
Типичный выпадающий в JSP, как показано ниже:
<h:panelGroup id="resultGroup">
<h:selectOneMenu syleClass="selectOneMenu" id="menu2" value="#{pc_CallView.result}">
<f:selectItems value="#{pc_CallView.results}" />
</h:selectOneMenu>
<hx:behavior event="onchange" target="menu2" behaviorAction="get;stop" targetAction="resultGroup">
</hx:behavior></h:panelGroup> <hx:ajaxRefreshRequest target="resultGroup" id="ajaxRefreshRequest6" params="menu2">
<hx:ajaxRefreshRequest> target="resultGroup" id="ajaxRefreshRequest6" params="menu2"></hx:ajaxRefreshRequest>
Методы в компоненте поддержки приведены ниже:
Для обработки выбранного значения:
public String getResult(){
String result = (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("menu2");
if(result!=null && !result.trim().equalsIgnoreCase("")){
getHelper().getCallDetails().setResult(result);
}
return getHelper().getCallDetails().getResult();
}
Чтобы заполнить варианты в раскрывающемся списке:
public List getResults(){
List results = getHelper().getCallResults();
List resultSelectItemsList = new ArrayList();
Iterator it = results.iterator();
resultSelectItemsList.add(new SelectItem("","-- select --"));
while(it.hasNext()){
ClientCallResult result = (ClientCallResult)it.next();
resultSelectItemsList.add(new SelectItem(result.getId(),result.getResult()));
}
return resultSelectItemsList;
}
Кнопка отправки:
<hx:commandExButton
type="submit" value="Save " styleClass="commandExButton"
id="saveButton" action="#{pc_Footer.doSaveAction}" rendered="#{pc_Footer.showSave}" />
Ничего необычного я бы не подумала, но все же у меня проблема.
Кто-нибудь видел что-нибудь подобное раньше?
С уважением
Билл
1 ответ
Я столкнулся с той же проблемой... какое решение я нашел, получить, остановка делает эту проблему... просто удалите остановку из поведение действия... тогда вы можете сделать N число вызовов AJAX...