我正在使用带有Tomcat的Java servlet来显示HTML中的Places表。表行中的数据由名称,位置等信息组成,通过获取servlet响应数据并将其注入标记来获取。然而,一旦完成,我需要使用Javascript根据其值操纵“td”元素。因此,如果其中一个进入“td”元素的位置是“USA”,我的Javascript函数将执行特定于“USA”元素的操作,例如使周围的边框变为红色,白色和蓝色。
我不想使用$ .ajax发送请求。我只想在脚本元素的范围内访问servlet响应返回的属性,就像我使用JSP scriptlet以下面的方式一样
<% request.getAttribute("location"); %>
我有点惊讶我没有找到如何在线进行此操作,因为它似乎是任何使用servlet和JS的人的日常行为,但我搜索了SO和Google无济于事。
答案 0 :(得分:5)
正如@CarlosGavidia(秘鲁研究员)所解释的那样,scriplets在服务器端运行,而JavaScript(以及jQuery或Dojo之类的其他框架)在客户端运行,例如在浏览器客户端。此外,脚本小程度的使用非常气馁,详细解释如下:How to avoid Java code in JSP files?
如果您访问了最后一个链接,您就会知道应该使用EL和JSTL来访问您的页面上下文(PageContext),请求(ServletRequest),会话(HttpSession)和/或应用程序(ServletContext)属性(更多相关信息:How to pass parameter to jsp:include via c:set? What are the scopes of the variables in JSP?)。
有了这个背景,现在你可以理解你不能直接访问请求属性(或其他来自Java代码的属性),除非它们被设置为DOM的一部分或者在javascript代码中注入。显示两种情况的示例:
将请求属性设置为DOM的一部分。
<input type="hidden" id="hidReqAttr" value="${location}" />
<script type="text/javascript">
function foo() {
var fromJavaSide = document.getElementById("hidReqAttr").value;
//fromJavaSide value will be ${location}
}
</script>
直接在JavaScript上注入请求属性。
<script type="text/javascript">
function foo() {
var fromJavaSide = '<c:out value="${location}" />';
//fromJavaSide value will be ${location} as string
}
</script>
请注意,使用任何这些方法意味着您可以使用JavaScript操作Java服务器变量值,但在JavaScript端只能 而不会影响在服务器端设置的请求属性值。换句话说:
<script type="text/javascript">
function foo() {
var fromJavaSide = '<c:out value="${location}" />';
//fromJavaSide value will be ${location} as string
fromJavaSide = fromJavaSide + '_modified';
//last line affects only the JavaScript variable, not the request attribute value
}
</script>
因此,如果其中一个进入“td”元素的位置是“USA”,我的Javascript函数将执行特定于“USA”元素的操作,例如使周围的边框变为红色,白色和蓝色。
使用带有ID的HTML组件或将CSS类名称应用于<td>
,以了解您将获得所需值的位置。以"USA"
为例:
<td class="${location eq 'USA' ? 'usaStyle' : 'commonStyle'}">${location}</td>
<script type="text/javascript">
function foo() {
var usaTDs = document.getElementsByClassName('usaStyle');
//now you have all TDs with usaStyle that has your `USA` text
}
</script>
根据您的评论,您还希望访问请求参数(可能来自查询字符串)。使用${param.parameterName}
获取它们。有关上述EL链接的更多信息,请查看隐式EL对象部分,其中介绍了获取请求参数和其他功能。
答案 1 :(得分:0)
HTML DOM操作应该使用JavaScript完成。 JSP / Servlet是服务器端编程技术,HTTPServletRequest
之类的对象无法通过JavaScript访问:这些实例存在于Servlet容器中,JavaScript在客户端浏览器中执行。
另一方面,我认为通过纯JavaScript更改TD
标记内容没有任何问题。您可以使用Dojo或JQuery等工具包来简化此任务。
答案 2 :(得分:0)
using ajax cal we can cal directly to our servlet class and servlet return string in json format(using gson lib) we can parse json using jquery parse method
$.ajax({
url: "controller/url",
success: function(result){
alert(result);
}});