我可以在JSF中调用的ajax数量是否有限制?

时间:2011-03-17 22:49:07

标签: java ajax jsf ibm-jsf

我正在IBM Wepsphere门户5.1环境中使用RAD 7开发一个portlet。我有各种字段,使用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}" />

我想不出任何不寻常的东西,但我仍然遇到了问题。

以前有人见过这样的事吗?

此致

比尔

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题..我找到的解决方案是get;停止正在解决这个问题...只需从behaviorAction中删除停止..然后你可以进行N个ajax调用......