您的位置:首页 > 其它

SSH开发问题-修改页面校验失败后返回原来页面(非OGNL)

2016-06-16 20:54 483 查看
记录2016-06-16大三SSH综合实训课

今天做结课作品遇到一个问题,就是当修改业务页面因为校验失败时返回原来的修改页面出现问题。

试着解决问题,用了不同方法:

<%@ page language="java" pageEncoding="utf-8"%>
<%@ page import="java.text.*" %>
<%@ page import="java.util.*"%>
<%@ page import="com.doctorFamily.domain.*"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<div class="main-container" id="main-container">
<div class="main-container-inner">
<div class="main-content">
<!--<div class="navbar navbar-default" id="navbar">-->
<div class="page-content">
<%
Notice notice = (Notice)request.getSession().getAttribute("singleNotice");
if(notice == null) out.print("获取失败");
if(notice != null){
%>
<!--<div class="row">-->

<!-- PAGE CONTENT BEGINS -->
<form class="form-horizontal" role="form"
action="<%=request.getContextPath()%>/notice/notice_UpdateNotice"
method="post">

<!--    隐藏公告编号以作为主键进行修改 -->
<input type="hidden" name="notice.no" value="<%=notice.getNo()%>"/>
<input type="hidden" name="notice.createTime" value="<%=notice.getCreateTime()%>"/>

<div class="form-group">
<div class="col-sm-6">
<h4 class="header green">标题</h4>
<div class="col-sm-6">
<input name="notice.title" type="text" id="residentId"
placeholder="标题" value="<%=notice.getTitle() %>"/>
</div>
</div>
</div>
<s:fielderror cssStyle="color:red; margin-bottom:0px; list-style:none;">
<s:param>notice.title</s:param>
</s:fielderror>
<div class="space-4"></div>
<div class="form-group">
<div class="col-sm-6">
<h4 class="header green">类别</h4>
<div class="col-sm-6">
<select name="notice.type">
<option value="1" <%if(notice.getType()==1) {out.print("selected='selected'");} %> >公告通知</option>
<option value="2" <%if(notice.getType()==2) {out.print("selected='selected'");} %> >行业新闻</option>
</select>
</div>
</div>
</div>
<div class="space-4"></div>
<div class="form-group">
<div class="col-sm-6">
<h4 class="header green">内容</h4>
<div class="widget-box">
<div class="widget-header widget-header-small header-color-green"></div>
<div class="widget-body">
<div class="widget-main no-padding">
<div class="wysiwyg-editor" id="editor2">
<%=notice.getContent() %>
<input id="noticeContent" type="hidden" name="notice.content"/>
</div>
</div>
<s:fielderror cssStyle="color:red; margin-bottom:0px; list-style:none;">
<s:param>notice.content</s:param>
</s:fielderror>
<div class="widget-toolbox padding-4 clearfix">
<div class="btn-group pull-right">
<button class="btn btn-sm btn-success" type="submit" onclick="getContent()">
<i class="icon-globe bigger-125"></i>发 布 <i
class="icon-arrow-right icon-on-right bigger-125"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- PAGE CONTENT ENDS -->
</form>
<!-- /.col -->
<!--</div>-->
<!-- /.row -->
<%
}
%>
</div>
<!-- /.page-content -->
<!-- /.main-content -->

<!--</div>-->
<!-- /.main-container-inner -->
</div>
</div>
</div>
</div>
<!-- 获取div中的文本信息 -->
<script type="text/javascript">
function getContent(){
var content = document.getElementById('editor2').innerText;
document.getElementById('noticeContent').value = content;
}
</script>


用chain启用pageAction的showUpdateNotice方法重返修改页面:

<!-- NoticeAction -->
<package name="notice" extends="struts-default" namespace="/notice">
<action name="notice_*" class="noticeAction" method="do{1}">
<result name="operateSuccess" type="chain">
<param name="actionName">page_showAllNotice</param>
<param name="namespace">/page</param>
</result>
<result name="input" type="chain">
<param name="actionName">page_show{1}</param>
<param name="namespace">/page</param>
</result>
</action>
</package>


当校验失败返回修改页面时表单信息能正确显示,但错误提示消息丢失无法显示,分析原因就是重新请求action时,因为重定向导致request丢失携带的错误信息,而notice因为pageAction重新获取表单信息。

直接跳转到
<result name="input">
重返修改页面


<!-- NoticeAction -->
<package name="notice" extends="struts-default" namespace="/notice">
<action name="notice_*" class="noticeAction" method="do{1}">
<result name="operateSuccess" type="chain">
<param name="actionName">page_showAllNotice</param>
<param name="namespace">/page</param>
</result>
<result name="input">/background/show{1}.jsp</result>
</action>
</package>


当校验失败返回修改页面时表单信息无法正确显示,分析原因就是重定向返回修改页面时request丢失了notice对象而没有重新获取。

**解决方法:

在pageAction中showUpdateNotice方法中讲查询得到的notice对象存放到session中,这样页面之间的跳转不会影响notice对象的存放**

public String showUpdateNotice() {
HttpServletRequest request = ServletActionContext.getRequest();
//      request.setAttribute("singleNotice",
//              noticeService.getNoticeById(noticeID));
request.getSession().setAttribute("singleNotice",
noticeService.getNoticeById(noticeID));
return "background";
}


当然最好的解决方法还是OGNL
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: