(小白)SSH框架如何把action的结果返回到jsp中请求方法的回调内,只想实现一个登陆提示功能。

My f 2020-02-06 10:12:02
用下面的方法还存在一些问题,就是提示信息关闭后会把网页链接改成我的登陆请求链接,导致页面变成空白的......
在struts配置type=json的方式也不行,会把登陆页面变成一个空白的页面并把需要的信息打印在了这个空白的页面上,而不是在登陆页面提示出来。

本人新手,刚接触SSH。请大神指点
struts配置部分:

<struts>
<!-- constant 配置 -->
<!-- 用于设置默认的本地编码 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 指定请求后缀为.action,指定多个请求后缀用逗号分隔 -->
<constant name="struts.action.extension" value="action" />
<!--设置浏览器是否缓存静态内容,建议:开发阶段关闭,运行时开启 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!--当struts.xml配置文件修改后,系统是否重新加载该文件,开发阶段打开此功能 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 开发提示:出错时打印更详细的信息,开发阶段打开此功能 -->
<constant name="struts.devMode" value="true" />

<!-- Strut2交给spring管理 -->
<!-- struts2框架就会把bean转发给spring来创建,装配,注入。但是bean创建完成之后,还是由struts容器来管理其生命周期 -->
<constant name="struts.objectFactory" value="spring" />

<package name="login" namespace="/" extends="struts-default">
<action name="loginAction" class="com.mywork.web.LoginAction">
<result name="index">/jsp/Main.jsp</result>
<result name="login">/jsp/Login.jsp</result>
</action>
</package>
</struts>


action 部分:
public class LoginAction extends ActionSupport implements ModelDriven<SUser>,
ServletRequestAware, ServletResponseAware {

@Autowired
ILoginService loginService;
private HttpServletRequest request;
private HttpServletResponse response;

private SUser sUser;
private String message;// 消息

@Override
public SUser getModel() {
sUser = new SUser();
return sUser;
}

@Override
public void setServletResponse(HttpServletResponse arg0) {
this.response = arg0;
}

@Override
public void setServletRequest(HttpServletRequest arg0) {
this.request = arg0;
}

// 登录
@ResponseBody
public void login() throws IOException {
response.setContentType("text/html;charset=utf-8");
String userNumber = sUser.getUserNumber();
SUser user = loginService.findByUserIdAndPassword(userNumber);
PrintWriter out = response.getWriter();
if (user != null) {
if (user.getPassword().equals(sUser.getPassword())) {
HttpSession session = request.getSession();
session.setAttribute("user", user);
out.print("<script>window.location.href='http://localhost:8080/CommodityManagementSystem/jsp/Main.jsp'</script>");
// return "index";
} else {
out.print("<script>alert('密码错误,请重新输入密码!')</script>");
// message = "密码错误,请重新输入密码!";
}
} else {
out.print("<script>alert('此账户不存在!')</script>");
// message = "此账户不存在!";
}
out.flush();
out.close();
// return "login";
}

// get set
public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}
}


jsp的登陆请求的方法:

function login(f){
/* $(f).Submit(function(d) {
alert(d);
alert("${message}");
console.log("${user}");
}); */
$.post("loginAction!login.action",f.serialize(),function(data){
alert(data);
});
}
...全文
88 点赞 收藏 3
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
亦夜 2020-02-07
response.setContentType("application/json;charset=utf-8")。后端设置这个并将提示信息和状态码封装成一个对象返回,前端直接通过res.code 或者 res.message 的方式获取返回信息,
回复
亦夜 2020-02-07
@ResponseBody的作用就是将你的数据返回给你的ajax请求成功回调啊,你这个方法都没有返回值,ajax的成功回调肯定就什么都接受不到了,而且你这是以输出流的方式将数据写到你的页面上,就是普通展示字符串
回复
My f 2020-02-07
@ResponseBody不太会用啊,能具体讲讲思路吗?
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2020-02-06 10:12
社区公告
暂无公告