用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中的数据。大大简化了开发人员在获取这些数据时的代码量。

参考技术D 同意楼上说法,json是一种数据传输格式,你书写的方式必须符合json的规范,这个你可以自己上网查查看

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>是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Struts2学习笔记 - 结果类型result

struts2 result type

result type struts2标签

struts2拾遗

Struts2 Result Type

Struts2.3动态调用报 No result defined for action 错误