Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery根据用户的每个请求更新java hashmap_Java_Javascript_Jquery_Jsp_Servlets - Fatal编程技术网

jquery根据用户的每个请求更新java hashmap

jquery根据用户的每个请求更新java hashmap,java,javascript,jquery,jsp,servlets,Java,Javascript,Jquery,Jsp,Servlets,是否需要先在浏览器上保存数据,然后使用jquery进行更新。我们不能直接更新servlet中的java对象吗。请建议,我已经在这里解释了我的情景。谢谢 在jsp中,我编写了一个jquery代码,它将get请求发送到我的Javaservlet。这是jquery代码 $.ajax({ url: '<%=portalContext.createTemplateProcessURI()%>' + '?s1=' + $("#networkBox1").val() + '&box

是否需要先在浏览器上保存数据,然后使用jquery进行更新。我们不能直接更新servlet中的java对象吗。请建议,我已经在这里解释了我的情景。谢谢

在jsp中,我编写了一个jquery代码,它将get请求发送到我的Javaservlet。这是jquery代码

$.ajax({
    url: '<%=portalContext.createTemplateProcessURI()%>' + '?s1=' + $("#networkBox1").val() + '&box1=Box1&tick=add&val1=' + allvs + '&s2=' + $("#networkBox2").val() + '&box2=Box2&val2=' + allvs,
    type: 'get',
    dataType: 'text',
    async: false,
    success: function (data) {
        Processbox(data); // This function displaying the result.
    }
});
$.ajax({
url:“+”?s1='+$(“#networkBox1”).val()+'&box1=box1&tick=add&val1='+allvs+'&s2='+$(“#networkBox2”).val()+'&box2=box2&val2='+allvs,
键入:“get”,
数据类型:“文本”,
async:false,
成功:功能(数据){
Processbox(数据);//此函数显示结果。
}
});
在我的java代码中,我检索所有这些参数,并根据收到的值操作Hashmap

public PortalURI execute(PortalContext portalContext) throws ActionException {

    HttpServletRequest request = portalContext.getPortalRequest().getRequest();
    HttpServletResponse response = portalContext.getPortalResponse().getResponse();
    HttpSession session = portalContext.getPortalRequest().getSession();

    Map<String, List<List<String>>> mapLeftBOX = new HashMap<String, List<List<String>>>();
    Map<String, List<List<String>>> mapRightBOX = new HashMap<String, List<List<String>>>();

    if ("add".equalsIgnoreCase(tick)) { 

       mapLeftBOX = (Map<String, List<List<String>>>) session.getAttribute(session,"mapLeft", null);   // retrieving the map Left value stored in session  in previous servlet
       mapLeftBOX.put(newkeyfromjquery, newvaluesfromjquery); // updsating the map with new values from jquery

       session.setAttribute("mapLeft", mapLeftBOX); // setting the new map in session

       out.write("concatStringsfrom mapLeftBOX"); // retrieve string values from map and write the response back to jquery
    }
}
public PortalURI execute(PortalContext-PortalContext)引发ActionException{
HttpServletRequest-request=portalContext.getPortalRequest().getRequest();
HttpServletResponse=portalContext.getPortalResponse().getResponse();
HttpSession session=portalContext.getPortalRequest().getSession();
Map mapLeftBOX=新建HashMap();
Map mapRightBOX=新建HashMap();
如果(“添加”.equalsIgnoreCase(勾选)){
mapLeftBOX=(Map)session.getAttribute(session,“mapLeft”,null);//检索存储在前一个servlet的session中的Map Left值
put(newkeyfromjquery,newvaluesfromjquery);//使用jquery中的新值更新映射
setAttribute(“mapLeft”,mapLeftBOX);//在会话中设置新映射
write(“concatstringsfrommapleftbox”);//从映射中检索字符串值并将响应写回jquery
}
}
这是我的示例代码。所以,当一个请求被触发时,jquery将得到调用,我的servlet将被执行。servlet中的hashmap将根据jquery发送的请求参数进行更新,更新后,我将新映射设置到会话中,然后将响应发送回jquery,jquery将在jsp上显示结果

现在,用户将触发另一个请求,并再次调用servlet,这次它将首先从会话中获取映射(我在前面的请求中设置了该映射),然后使用新的jquery值更新该映射,并将其再次放入会话中,然后将响应发送回jquery并在jsp中显示

此用户可以重复多次,直到完成。完成后,jsp会单击submit按钮,用户将通过相同的更新地图在另一个jsp上显示最终结果。最后,用户将在该jsp上单击submit并将值存储在服务器中

我的问题是:

正如您现在看到的,我直接通过Jquery get请求调用和操作java对象(hashmap)。 这是我遵循的正确方法吗?让我告诉您,我的功能在dev环境中运行良好,但我担心这种方法还没有开始使用

(另一种方法2——我想到的是,我可以首先将所有数据放入浏览器,然后使用jquery操作DOM数据,因此无需反复调用Java servlet。但我的数据非常复杂,在DOM/客户端更新数据将非常复杂,即使我更新了数据,也需要发送将DOM的更新数据完成到servlet,这将很复杂)


这就是为什么我决定采用第一种方法,它将直接在servlet中更新我的对象,我可以从会话中获取最新的对象提交给服务器。

请回答某人。谢谢!我理解上下文,但我不太喜欢你的方法。例如,通过ajax更改会话值。你能提供更多信息吗?如何jquery是否获得这些值?它是否像添加动态输入字段或表克隆的add按钮一样?@Syam首先感谢您的响应…实际上,当响应来自jquery中的servlet时,我会显示结果。我对每一行都使用了复选框,因此通过单击箭头>>,可以检查行数以将行移动到右侧框。单击事件用于jquery GET request,该请求发送数组中复选框的参数。因此,您是对的,它们是带有复选框的表列。您可以发布jsp代码片段?复选框部分。但是,我建议您使用所有值进行一次提交。如果您使用的是html表单对象,则可以使用request.getParaMeterValue或request.getParameter来检索这些值。