2011-10-03 110 views
1

我有一个场景,必须尽可能简单地填写表单。表格中填写的值最初由用户询问并存储在数据库中。是否有可能在servlets/jsp和javascript函数之间共享会话变量?

之后,当用户点击一个按钮时,会调用一个javascript函数,用jsp/servlet获取的值自动填充表单中的所有字段。

我想在servlet/jsp的帮助下从数据库中检索值(即要填入表单中的值)...现在应该有一些方法让javascript函数填充此值(即是通过servlet/jsp获得的)形式...

是否可以在jsp/servlets和javascript之间进行数据/变量共享? javascript函数将成为jsp的一部分(它检索应该填入表单中的值)。

回答

1

如果请求是同步发送的(例如表单提交按钮),那么你不一定需要JS来完成这项工作。只需让JSP/EL立即将它们打印为基于由servlet预先填充的数据的输入值。例如,假设${user}是由小服务程序制备的典型的Javabean:

<input type="text" name="name" value="${fn:escapeXml(user.name)}" /> 
<input type="text" name="city" value="${fn:escapeXml(user.city)}" /> 
<input type="text" name="country" value="${fn:escapeXml(user.country)}" /> 

(该fn:escapeXml()只是为了防止跨站脚本攻击)

如果请求被异步地发送(使用AJAX例如),那么你只需要让该servlet以JS可以轻松解析的格式返回数据,例如JSON。

{ 
    "username": "Bauke Scholtz", 
    "city": "Willemstad", 
    "country": "Curaçao" 
} 

然后可以使用作为Ajax响应回调函数如下(其中user是获得JSON对象):

document.getElementById("name").value = user.name; 
document.getElementById("city").value = user.city; 
document.getElementById("country").value = user.country; 

jQuery让这样的事情要容易得多。另请参阅How to use Servlets and Ajax?

1

浏览器中的Javascript客户端无法直接访问服务器上的环境(并且不应该想象如果所有页面在您决定使用不同服务器解决方案的那一天都打破了这种情况会怎么样)。你基本上有两种选择:

  • 包括你永远都需要你提供给客户端的网页上的所有数据(可能是HTML表单的dinamically产生,以满足您的需求,等等等等)

  • 通过XMLHttpRequest(aka AJAX)手动请求额外的信息。如果您只能确定在页面加载后需要使用哪些数据,那么这是唯一的方法。