从servlet返回到JSP时,Javascript更改消失

时间:2015-02-08 19:43:16

标签: java javascript jquery jsp servlets

晚上好, 我在一个连接到servlet的JSP页面上有一个表单,该表单有一些使用JavaScript的动态部分,比如在表中添加一行或者在select元素上添加基于所选选项的文本字段,实际上我的问题是我在servlet端有一些验证,所以当我去servlet检查(国民身份证)时,例如,如果有任何问题或任何违反我的验证,我强制回到表单使用:

if (dbm.MatchIdNumber(Candidate.getRegNumber(), Candidate.getNationalID()) == false) {
                    out.println("<script>\n"
                            + "     alert('Your National Id does not match your Registration Number');\n"
                            + "</script>");
                    out.println("<script>\n"
                            + "     window.history.go(-1);\n"
                            + "</script>");
                }

当我回到表单时,我会丢失所有JavaScript更改,这非常重要。 我已经阅读了一段时间,使用ajax可能是我的最佳解决方案,但这是我的问题:

  1. 有没有办法在不使用ajax的情况下访问servlet之前从JavaScript或JQuery调用java方法!?!
  2. 有没有办法从servlet返回到jsp页面,能够保留所有的JavaScript Chages!?
  3. 如果不是!!,如何在我的情况下使用ajax?!
  4. 非常感谢

1 个答案:

答案 0 :(得分:0)

  1. 没有。 JavaScript在用户的浏览器上运行,您的Java代码在您的Web服务器上运行,因此基本上两者之间通信的唯一方法是通过HTTP请求。

  2. 如果您不想使用AJAX,则可以在将表单提交给服务器进行验证时提供所有相关信息。您可以传递重新生成表单所需的所有信息,例如哪些新字段等等

  3. 首先,您需要向Java webapp添加一个新的Web服务,以执行验证。要实现这一点,您可以向servlet添加额外的逻辑(以便它查找请求参数,如“doValidation = 1”并执行验证,如果它在那里)或编写一个处理验证本身的不同servlet。您需要确定它应该期望表单数据的格式以及它应该如何返回验证信息。

    在您的前端页面上,您需要修改表单的行为,以便在需要进行验证时,它会对此Web服务执行请求并传递表单数据。我可能会使用jQuery执行此操作并执行类似jQuery.ajax(...)的操作,并将表单的内容作为JSON对象传递。

    当验证servlet从ajax调用返回数据时,您需要根据它提供的数据更新表单。如果我这样做,我可能只是让servlet返回一个JSON对象,如{errorMessage:“...”},我会使用jQuery在包含验证错误文本的表单中添加一个元素。如果servlet返回一个空字符串或JSON对象,我会认为它是验证成功。