用struts2开发,<result type="json"></result>是啥意思?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用struts2开发,<result type="json"></result>是啥意思?相关的知识,希望对你有一定的参考价值。
我会的只有<result name="success">success.jsp</result>比如在一个.java文件中执行后返回的结果值是String类型的success,则跳转到success.jsp页面去。但不知道这个type="json"是什么意思,页面又跳转到哪里了。
在Struts2中,type="json“这样是用来做AJAX请求的所以根本就没有跳转页面。
json是一种数据格式,具体可以网上去学习一下。
在Struts2中,如果这样写,会将你Action中的变量转成JSON 返回到页面
用来做AJAX是非常方便的。具体请参考Struts2的手册 参考技术A 在struts2里,设置了<result name="success">success.jsp</result>后,你的action中的方法返回"success"后,你跳转的不是某个页面,而是像下载数据一样的,得到是包含json字符串的流。返回的josn数据是acton中的get方法返回的值。这时。你的action中用spring托管的dao之类的不能写get方法,否则会报错! 参考技术B 说明在定义action方法中返回的结果是个josn串的形式,也就是说,在Action中返回的类型是个key-vaule形式的。
举例:
@JSON(name="newName")
public String getCustomName()
returnthis.customName;
public String execute()
map.put("name","yeeku");
return “success”;
此时struts中,如果读取name值的话,就可以通过ajax进行读取了。 参考技术C
指利用struct2这个框架编写程序
Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。
Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程。
使用OGNL进行参数传递。
OGNL提供了在Struts2里访问各种作用域中的数据的简单方式,你可以方便的获取Request,Attribute,Application,Session,Parameters中的数据。大大简化了开发人员在获取这些数据时的代码量。
Struts2.3动态调用报 No result defined for action 错误
struts 2.3.16 採用动态调用发现不工作报404 not found,网上查找原因:
1.由于:struts2中默认不同意使用DMI
所以:须要在配置文件里打开: <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
改动发现报No result defined for action
2.错误信息来看,是说未定义result。
你有没有配置拦截器<interceptor-ref name="validation"/>?
假设有的话,去掉全部的拦截器。
包含这个缺省的拦截器栈:<default-interceptor-ref name="defaultStack"/>
struts调用action的3种方式:(引至互联网)
动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action相应多个请求的处理,以免Action太多 第一种方式:指定method属性 这样的方式我们前面已经用到过,相似以下的配置就能够实现 <action name="chainAction" class="chapter2.action.Chapter2Action" method="chainAction"> <result name="chainAction" type="chain">redirect</result> </action> <action name="plainText" class="chapter2.action.Chapter2Action" method="plainText"> <result name="plainText" type="plainText">/WEB-INF/JspPage/chapter2/plaintext.jsp</result> </action> 另外一种方式:感叹号方式(须要开启),官网不推荐使用这样的方式,建议大家不要使用. 用这样的方式须要先开启一个开关 <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 将此常量设置为true,这样的方式才干使用,使用见演示样例 Action package chapter3.action; public class Chapter3Action { public String result1(){ return "result1"; } public String result2(){ return "result2"; } } Jsp中訪问方式 <body> <a href="${basePath}/chapter3/chapter3Action!result1">result1</a><br> <a href="${basePath}/chapter3/chapter3Action!result2">result2</a><br> </body> 假设配置了后缀,必须这样写: /chapter4/chapter4Action!create.action XML中配置方式 <package name="chapter3" namespace="/chapter3" extends="struts-default"> <action name="chapter3Action" class="chapter3.action.Chapter3Action"> <result name="result1">/WEB-INF/JspPage/chapter3/result1.jsp</result> <result name="result2">/WEB-INF/JspPage/chapter3/result2.jsp</result> <result name="chapter3">/WEB-INF/JspPage/chapter3/chapter3.jsp</result> </action> </package> 第三种方式:通配符方式(官网推荐使用) 首先得关闭开关 <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 这一种方式是由第一种转变过来的,我们能够看到,第一种方式有非常多反复的代码,那么我们能够进行变形,看以下的代码 <action name="chapter3_*" class="chapter3.action.Chapter3Action" method="{1}"> <result name="test">/…/test.jsp</result> </action> chapter3_*这里的*就是你呆会要匹配的字符串,即你在后面的请求中得这样写 http://...../ chapter3_create 或 http://...../ chapter3_update 注意,这时你action中必须有create和update方法与之匹配,甚至还能够这样匹配 <action name="chapter3_*" class="chapter3.action.Chapter3Action" method="{1}"> <result name="test">/…/{1}.jsp</result> </action> 可是这时一定要有相应的JSP页面存在,而且相应的路径不能错,这就对我们的命名进行了强制性的规定,一定要规范. 课堂演示样例: Action public class Chapter4Action extends ActionSupport { public String list(){ return "list"; } public String create(){ return "create"; } public String index(){ return "index"; } } XML: <action name="chapter4_*" class="chapter4.action.Chapter4Action" method="{1}"> <result name="{1}">/WEB-INF/JspPage/chapter4/chapter4_{1}.jsp</result> </action>
关于通配符匹配的优先权:
(1)假设struts.xml里面有相应的action name ,就算它有其它通配符匹配的,都优先相应全然同样的。
比方 有一个 action name 是 "user_add" 另一个是 "user_*"。
如今,有一个请求是 "user_add.action "。那么。它会优先匹配"user_add " 。
(2)假设一个action name相应于两个带通配符的action name 那么。须要看这个配置谁在前面,它匹配写在前面的
比方 有一个 action name 是 "*_*" 另一个是 "user_*" 。如今。有一个请求是 "user_add.action ",.那么它会优先匹配写在前面的那个action
(3)不论什么带"*"的action name 优先权都是一样的。不是说带一个"*"的优先权就比带两个"*" 的高.
总结:因此我们应该把具有含有最多通配符的Acton配置放在最后,否则Struts2一一匹配全部的Action,这会减少程序的效率。
以上是关于用struts2开发,<result type="json"></result>是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章