导航:首页 > 编程语言 > struts2使用js

struts2使用js

发布时间:2025-01-27 12:35:11

1. 如何使用js为struts2文本标签赋值并能让对应的action属性得到值

不知道我理解的对不对,我给你举个例子吧。你这么写。
<script type="text/javascript">
function setTime(){
document.getElementById("times").value="2011/10/22 07:09:10";
}
</script>
<body onload="setTime()">
<s:form action="你的action地址">
<s:textfield name="d" id="times"></s:textfield>
<s:submit value="提交"/>
</s:form>
</body>

页面也就内这样了吧,action中加一个属性容,名字叫d,类型为Date或者String都行,为其加上get和set方法,直接输出,你会看到值的。

2. 用JS生成的动态输入框在Struts2的action中如何获取所有的value

在Action的相应方法中使用request.getParameterNames方法可以获得表单中提交的所有数据的名称,然后循环使用这个request.getParameter("name")来一个一个获取每个name的值。这样就可以获得所有的值了。

3. 用Struts2+extjs做web项目,后台返回success为false,Ext.ajax.request也用调用success方法

function getAdmin(){
Ext.Ajax.request({
url:'admin!select',
method:'post',
waitMsg:'数据加载中,请稍后....',
success:function(response,opts){
var obj=Ext.decode(response.responseText);
alert('成功'+obj.success);
},
failure:function(response,opts){
var obj=Ext.decode(response.responseText);
alert(obj.result);

}
})
}

这里的success是表示你的服务器响应状态值为200.即表示服务器成功响应。不管你响应给客户端的内容是什么,只要响应成功就会执行这个success,跟你返回的内容无关。
至于你想根据你返回的参数success值进行判断分别处理,你得在上面的success中进行判断处理。比如像这样:
Ext.Ajax.request({
url:'admin!select',
method:'post',
waitMsg:'数据加载中,请稍后....',
success:function(response,opts){
var obj=Ext.decode(response.responseText);
if(obj.success == "true") {//如果你处理的JSON串中true不是字符串,就obj.success == true
//你后台返回success 为 false时执行的代码
} else {
//你后台返回success 为 false时执行的代码
}
},
failure:function(response,opts){
var obj=Ext.decode(response.responseText);
alert(obj.result);

}
})

还有个问题想问下楼主,你是怎么响应客户端信息的???你那个方法不能返回给客户端信息列。

4. 怎么在 js 代码中使用 jsp 标签或 Java 代码

JSP 标签还是很方便的,比如 Struts、Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算。比如
struts2 的 <s:url value="/admin/unmi.action"/>
会为我们自动在前面附加上应用上下文,如实际会生成
/testsite/admin/unmi.action。还有更多更方便的标签使用,比如用标签获取到 session 或请求中的数据作为 js
的变量等。

引申此话题的,其实不光是在 JS 中使用 JSP 标签,可用 JSP 标签的地方当然可以直接写 Java 代码,即 ScriptLet 代码。

如果是在 JSP 中内嵌的 JS 代码,那当然好办,JSP 文件中能用什么标签,js 代码中也能随便用,因为 JSP 标签会先在服务端解释生成相应的 JS 代码,丢给客户端执行。

那如果是在单独的 JS 文件中想要使用 JSP 标签,该如何办呢?还直接像 JSP 那样使用标签的话,对不起 JS
文件中给你原样显示出来,因为 JS 文件不被服务器端解释。其实到现在问题也基本有了答案,要解决的问题就是要让服务端去解释你的标签,有两种方案。

一. js 文件命名为 JSP 文件,写 js 内容,其中用标签,然后用 <script src="/scripts/tags.js.jsp"></script> 把该 JSP 文件当作 JS 文件那样引入。

因为 JSP 文件会被服务端解释,所以把该 JSP 文件当作 JS 文件来写,JS 文件里应该是什么,你的 JSP
文件也应该输出什么,只是里面可以放标签,要知道它将会输出什么。用 <script> 来引入的话,页面顺理的把它认为是一段外部 JS
代码。

例如文件 /scripts/tags.js.jsp 中的内容是:

<%@ taglib prefix="s" uri="/struts-tags" %>
var currentUser = '<s:property value="#session.userName" />';
alert("currentUser: " + currentUser);

那么在某个网页中用 <script src="/scripts/tags.js.jsp"></script> 引入该文件时,上面的 JS 代码将会弹出当前 session 中的用户名来。

上面代码执行都没问题的,但是你直接浏览 http://unmi/testsite/scripts/tags.js.jsp 你看到的是挤在一团的代码,不像查看普通 JS 文件那样有清晰的换行和退格,原因是浏览器默认只认扩展名,它的 mime 类型,也就是 Content-Type text/html。要让它更像是个 JS 文件那得给它加上响应类型的设置,在 tags.js.jsp 文件第一行加上:

<%response.setContentType("text/javascript;charset=utf-8");%>

这时候对于浏览器来说,无论从哪个方向来看它都是个切切实实的 JS 文件,只扩展名不同罢了。

上面的方法实际表现是没什么问题的,不过还有两点不那么完美,第一,文件名看起来像 JSP 文件,有些令人误解;第二,在 IDE 中打开该 JSP 文件,没法应用 JS 的语法加亮,给编辑带来不少麻烦。下面的方法充分解决前面两个问题。

二. 直接在 JS 文件中使用 JSP 标签

讲下原理,不是说应用服务器端默认不解释 JS 中的标签吗,那我们可以让个别的 JS 文件同样受到服务器端的关注,不是把 js 原文直接抛给客户端,而是先解释其中的标签,或是其中的 java 代码。

Tomcat 这种应用服务器我们通常也会称它为 Servlet 容器,因为它执行的是 Servlet,JSP 自然也是 Servlet。在 %TOMCAT_HOME%/conf/web.xml 中我们可以看到实际处理 JSP 文件的 Servlet 是:

<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>

org.apache.jasper.servlet.JspServlet,所以我们可以在自己应用的 web.xml
文件中配置某些特别的文件同样由 JspServlet 来处理。比如要特别处理 /scripts/tags.js 文件,在应用的 web.xml
中只要加上:

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/scripts/tags.js</url-pattern>
</servlet-mapping>

注意,上面是 Tomcat 6.x 或更早版中应用的 web.xml 的写法,后来 servlet-mapping 中
url-pattern 可同时写多个,加上 Tomcat 7 自身的古怪,这一设置会覆盖掉原 jsp 的设置,所以在 Tomcat 7
中应用必须配置成如下(也就是必须默认项也带上,然而列出自己的希望被当作 jsp 的 js 文件,可多个,不把 *.jsp/*.jspx
带上的话,你原有的 jsp 会当作文本文件直接展示出源码来):

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
<url-pattern>/scripts/tags.js</url-pattern>
</servlet-mapping>

我们配置 /scripts/tags.js 要由 JspServlet 来处理,不会影响到现有的其他任何 JS 文件。

那现在的 /scripts/tags.js 可不是普通的 js 文件了,它可是具有放置 JSP 标签和写 Java
代码的超能力了,因为其中的 JSP 标签和 Java 代码首先会经由服务端来解释。它集 JS 和 JSP 于一身,另外也别忘了给该 JS
文件前面加上代码:

<%response.setContentType("text/javascript;charset=utf-8");%>

不然单独浏览它也就只是不那么好看。

无疑,这是目前我能想的最完美的一种方式了,且兼容于其他的 Servlet 容器,也不用改动公共部分的东西。/scripts/tags.js 在 JS IDE 中打开也漂亮多了,因为它就是个 JS 文件,只是被赋予了 JSP 的功能。

5. javascript如何获得后台response.getWriter().write()返回的值我用的struts2

这个你要用抄ajax才可以获得。
也就是说,在js里
1新建XMLHttpRequest对象(例如名为:xmlhttp)
2.XMLHttpRequest对象发送请求 :xmlhttp.open("GET","url",true);
注意里面的url就是你struts2跳转的action,例如test.action
3.通过struts.xml找到url跳转到的Action,在execute方法里写 response.getWriter().write("aaaaa");
Struts2获得Httpresponse对象会吧,要用ServletActionContext.getResponse(); (别忘了在execute方法最后加上一句return null ,作为execute方法的返回。)
4.在js后面里继续写: var resultstr = xmlhttp.responseText; 那么等异步传输完成,resultstr就会被赋值为"aaaaa"

我前面说的1,2,4步骤都是涉及ajax内容,如果对ajax不了解,需要先去学习ajax基础用法

阅读全文

与struts2使用js相关的资料

热点内容
python第一个程序 浏览:841
企鹅电竞购买砖石升级 浏览:244
汝工作室网站是多少 浏览:304
电脑查程序卸载记录 浏览:499
如何找到流氓软件的文件夹 浏览:647
英雄三国将星怎么升级 浏览:864
php后最的数据库 浏览:896
女生学编程要什么条件 浏览:459
负责数据统计的擅长什么 浏览:309
webcollector视频教程 浏览:411
苹果电脑连不上tplink 浏览:826
手机桌面壁纸文件夹 浏览:400
编程c语言中怎么复制 浏览:422
pythonjson转字典 浏览:577
系统文件的作用 浏览:569
js点击后图片文字变色 浏览:768
如何用编程猫制作我的世界mod 浏览:448
录屏文件是哪个 浏览:162
压缩包里的游戏文件是哪个 浏览:990
如何用编程做认识花朵宣传相册 浏览:550

友情链接