当前位置:编程学习 > JAVA >>

新手Struts2的问题


//in action
String getUsername() {
    return username;
}

void setUsername(String username) {
    this.username = username;
}
//in jsp

<s:property value="username"/>


这样用s标签可以得到username, 但是我现在想通过ajax(单纯的用javascript发送ajax不用任何jar)得到这个username
有什么办法呢? 比如 有没有可能通过这个网址 action_url/username或者类似的方式得到这个username?
主要就是想用于ajax

我以前做asp.net的
public class HomeController : Controller
{
    public ActionResult Home()
    {
        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

        return View();
    }

    public JSONResult getJson()
    {
        return JSON(new Object());
    }
}

在asp.net的mvc里头 一个controller 可以有多个方法 对应不同的url
比如上述例子 controller_name/Home 就能进入一个网页 controller_name/getJson 就可以获得一段JSON
我就想struts2是不是也可以一个class 能否返回多种类型?
(不过后来我理解 asp.net的controller中的一个方法 对应struts中一个Action比如Home如果用Struts可以是HomeAction 而getJSON就变成另一个Action 不知道我理解对不对?)


--------------------编程问答-------------------- 现在用单纯的JS写AJAX很少了,基本都是通过现在的JS框架来实现的,用得最多的应该是JQUERY,里面封闭了直接调用AJAX的方法,非常方便,并且可以设置返回数据类型,你可以通过JQUERY在JSP页面调用ACTION,返回数据就可以了.
--------------------编程问答-------------------- 你知道dwr不。这个可以实现。 --------------------编程问答--------------------

<package name="json" extends="json-default" namespace="">
   <action name="actionName" class="com.*.*.test" method="test">
   <result type="json">   
    <param name="includeProperties">username</param>   
</result>
   </action>

 </package>


url/actionName.action 就能得到返回的json内容了,可以用ajax调用这个url --------------------编程问答--------------------
引用 3 楼 u010601730 的回复:

<package name="json" extends="json-default" namespace="">
   <action name="actionName" class="com.*.*.test" method="test">
   <result type="json">   
    <param name="includeProperties">username</param>   
</result>
   </action>

 </package>


url/actionName.action 就能得到返回的json内容了,可以用ajax调用这个url



对,在你的struts的配置文件里面,将action的返回数据类型改成json的方式
--------------------编程问答--------------------
引用 3 楼 u010601730 的回复:

<package name="json" extends="json-default" namespace="">
   <action name="actionName" class="com.*.*.test" method="test">
   <result type="json">   
    <param name="includeProperties">username</param>   
</result>
   </action>

 </package>


url/actionName.action 就能得到返回的json内容了,可以用ajax调用这个url


我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现) --------------------编程问答--------------------
引用 5 楼 u010789339 的回复:
Quote: 引用 3 楼 u010601730 的回复:


<package name="json" extends="json-default" namespace="">
   <action name="actionName" class="com.*.*.test" method="test">
   <result type="json">   
    <param name="includeProperties">username</param>   
</result>
   </action>

 </package>


url/actionName.action 就能得到返回的json内容了,可以用ajax调用这个url


我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现)




可以

PrintWriter out = ServletActionContext.getResponse().getWriter();
ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
out.print(username);
out.close();


return null;
--------------------编程问答-------------------- 比较简单就是使用jquery的$.post(url,"usernmae=xxx",function(data){alert(data)});
你在action那里直接response.getWriter().print(data);字符串,然后页面转换这个data字符串就可以了
你可以到我的博客那下载那开源项目看看里面是怎么实现的,没什么问题 --------------------编程问答-------------------- 有框架为什么要自己写  jquery的 ajax想怎么交就怎么交 难道 写错了你再回来调JS? --------------------编程问答--------------------
引用 6 楼 u010601730 的回复:
Quote: 引用 5 楼 u010789339 的回复:

Quote: 引用 3 楼 u010601730 的回复:


<package name="json" extends="json-default" namespace="">
   <action name="actionName" class="com.*.*.test" method="test">
   <result type="json">   
    <param name="includeProperties">username</param>   
</result>
   </action>

 </package>


url/actionName.action 就能得到返回的json内容了,可以用ajax调用这个url


我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现)




可以

PrintWriter out = ServletActionContext.getResponse().getWriter();
ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
out.print(username);
out.close();


return null;


你的那段java代码是放在execute吧 这样的话 虽然可以输出string 但是没法返回页面了啊
我的意思是能不能有2个execute
我现在的解决办法是
判断url, 如果url是actionname?act = getjson 的话就返回string 否则返回页面 --------------------编程问答-------------------- ajax请求这个action 然后把username返回去就是了。 --------------------编程问答--------------------
引用 9 楼 u010789339 的回复:
Quote: 引用 6 楼 u010601730 的回复:

Quote: 引用 5 楼 u010789339 的回复:

Quote: 引用 3 楼 u010601730 的回复:


<package name="json" extends="json-default" namespace="">
   <action name="actionName" class="com.*.*.test" method="test">
   <result type="json">   
    <param name="includeProperties">username</param>   
</result>
   </action>

 </package>


url/actionName.action 就能得到返回的json内容了,可以用ajax调用这个url


我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现)




可以

PrintWriter out = ServletActionContext.getResponse().getWriter();
ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
out.print(username);
out.close();


return null;


你的那段java代码是放在execute吧 这样的话 虽然可以输出string 但是没法返回页面了啊
我的意思是能不能有2个execute
我现在的解决办法是
判断url, 如果url是actionname?act = getjson 的话就返回string 否则返回页面



不用判断url,你给url加个参数就行了比如/*.action?type=ajax 后台就用我上面那段代码,如果type=html

后台代码判断下 if(type.equals("ajax")){ .... }else{ ... return SUCCESS  } --------------------编程问答-------------------- 我明白你的意思了
还有想问下 怎么获得type呢? 有没有内置方法?
或者我需要ServletActionContext.getRequest().getParameter("type")?
企业里也是这么做的么?

引用 11 楼 u010601730 的回复:
Quote: 引用 9 楼 u010789339 的回复:

Quote: 引用 6 楼 u010601730 的回复:

Quote: 引用 5 楼 u010789339 的回复:

Quote: 引用 3 楼 u010601730 的回复:


<package name="json" extends="json-default" namespace="">
   <action name="actionName" class="com.*.*.test" method="test">
   <result type="json">   
    <param name="includeProperties">username</param>   
</result>
   </action>

 </package>


url/actionName.action 就能得到返回的json内容了,可以用ajax调用这个url


我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现)




可以

PrintWriter out = ServletActionContext.getResponse().getWriter();
ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
out.print(username);
out.close();


return null;


你的那段java代码是放在execute吧 这样的话 虽然可以输出string 但是没法返回页面了啊
我的意思是能不能有2个execute
我现在的解决办法是
判断url, 如果url是actionname?act = getjson 的话就返回string 否则返回页面



不用判断url,你给url加个参数就行了比如/*.action?type=ajax 后台就用我上面那段代码,如果type=html

后台代码判断下 if(type.equals("ajax")){ .... }else{ ... return SUCCESS  }


我明白了  --------------------编程问答-------------------- 楼主你好,我也是新手在学习Struts+Jquery。就你说的这个例子,我还想看看你的Java源代码,可以贴上来共享一下吗?谢谢!  我以前用过php+Jquery,觉得非常简便易用,现在换到Struts环境下,不知道如何来控制JSON数据的格式和如何传递与接收。 --------------------编程问答--------------------
引用 13 楼 laoyaotask 的回复:
楼主你好,我也是新手在学习Struts+Jquery。就你说的这个例子,我还想看看你的Java源代码,可以贴上来共享一下吗?谢谢!  我以前用过php+Jquery,觉得非常简便易用,现在换到Struts环境下,不知道如何来控制JSON数据的格式和如何传递与接收。
加我QQ one 9 nine 9 nine four 6 zero  5 --------------------编程问答--------------------
引用 14 楼 u010789339 的回复:
Quote: 引用 13 楼 laoyaotask 的回复:

楼主你好,我也是新手在学习Struts+Jquery。就你说的这个例子,我还想看看你的Java源代码,可以贴上来共享一下吗?谢谢!  我以前用过php+Jquery,觉得非常简便易用,现在换到Struts环境下,不知道如何来控制JSON数据的格式和如何传递与接收。
加我QQ one 9 nine 9 nine four 6 zero  5


谢谢!经努力已搞定!你的帖子对我启发很大  --------------------编程问答-------------------- 提醒结贴!   -0-  --------------------编程问答-------------------- 也可以不用在struts2中配置type等于json,可以直接拿到PrintWriter往ajax请求写哦。然后页面还是同样跳转。这样的json格式,就需要自己去拼字符串了。然后在前台接受后,eval("("++")")当做json格式,这样也可以把。这是我的方法。 --------------------编程问答-------------------- ajax的返回类型都不一样! --------------------编程问答-------------------- 如果你返回的对象,那里面就是包含那些值的
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,