Я разрабатываю портлет с RAD 7 в среде портала IBM Wepsphere 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>

Методы в поддерживающем bean-компоненте такие, как показано ниже:

Чтобы обработать выбранное значение:

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}" />

Ничего необычного я бы не подумал, но все же я понял проблему.

Кто-нибудь видел что-нибудь подобное раньше?

Отношении

Билл

0
Bill 18 Мар 2011 в 01:49

1 ответ

Я столкнулся с той же проблемой. Решение, которое я нашел, это get;stop делает эту проблему... просто удалите остановку из поведенияAction.. тогда вы можете сделать N количество вызовов ajax...

0
Parivesh Jain 7 Сен 2011 в 08:38