struts2 action 在前臺彈出信息提示框

copy下來的,作爲參考資料:

第一種:在struts2 action中彈出Js腳本提示信息

讓action實現ServletResponseAware接口,同時實現其setServletResponse() 方法
import org.apache.struts2.interceptor.ServletResponseAware;
public class StudentAction extends ActionSupport implements ServletResponseAware{
private javax.servlet.http.HttpServletResponse response;

public String addStudent() throws IOException{
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");//防止彈出的信息出現亂碼
PrintWriter out = response.getWriter();
studentDAO=new StudentDAO();
flag=studentDAO.addStudent(stu);
if(flag){
out.print("<script>alert('添加成功!')</script>");
out.print("<script>window.location.href='http://ykdreaming.blog.163.com/blog/stuaction.action'</script>");
out.flush();
out.close();
return null;
}else{
return "error";
}
}

}

// 獲得HttpServletResponse對象
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
------------------------------------------------------------------------------------------------------------------------------
第二種:把錯誤信息放入request裏面,然後在頁面上判斷此信息是否存在,存在的話就彈出

最 近在用Struts2+Spring+Hibernate主流框架開發項目,其中有部分界面表單提交結果的處理問題,之前一直都是通過 struts.xml配置指定的返回頁面,在頁面上顯示出actionMessage,這樣感覺不是很好,就想不要頁面跳轉,點擊按鈕處理後直接由js來 alert()出來,以前沒有專門研究過,知道ajax可以實現,但那樣每個提交時都要用ajax,太麻煩了,現在把我的實現方式記錄下來:

首先,還是傳統的Action,一般情況下,我們要返回信息可能會這樣寫:this.addActionMessage("提交成功!");這裏做一點變化,用request.setAttribute("tipMessage", "提交成功!"); (tipMessage是自定義的)。

OK,然後在當前提交的頁面里加上如下一段js:
<script type="text/javascript">
var msg="${requestScope.tipMessage}";
if(msg!=""){
alert(msg);
}
</script>
當然了,最後要記住struts.xml裏同樣要配置<result />的相關信息。
------------------------------------------------------------------------------------------------------------------------
第三種:
以前我們在action中寫類似這樣的代碼
this.addActionMessage("提交成功!");

頁面上:
<s:if test="hasFieldErrors()">
<s:iterator value="fieldErrors">
<s:iterator value="value">
<script language="JavaScript">
alert('<s:property/>');
</script>
</s:iterator>
</s:iterator>
</s:if>
這樣當有field錯誤,就會彈出錯誤提示!當然不alert的話 也可以在外面之間套上div,控制輸出格式
但問題來了,如果有多個field錯誤 就會不斷地彈出消息窗口
如何把所有的錯誤消息全部顯示在一個對話框中,每條錯誤消息佔一行顯示呢?

經過很長時間的摸索 問題終於給解決了 現在把它分享出來

在需要顯示消息的頁面加入include來引用message.jsp (或者把message.jsp的內容直接放在要顯示消息的頁面 )
<s:include value="message.jsp"></s:include>

最好把它放在頁面最後 等頁面全部加載後 再顯示消息,要不然 加在前面的話就可能看到頁面空白 消息提示顯示完成後才顯示頁面.

message.jsp代碼如下

<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<body>
//fielderror
<s:if test="hasFieldErrors()">
<s:iterator value="fieldErrors">
<s:iterator value="value" status="statu">
//field的錯誤消息是List 因此還需要迭代一次
<s:set name="index" value="#statu.index"/>
<s:set name="msg" value="#msg==null?'':#msg+
value.get(#request.index).toString()+'\\\n'"/>//關鍵代碼
</s:iterator>
</s:iterator>
</s:if>

//actionerror
<s:if test="hasActionErrors()">
<s:iterator value="actionErrors">
<script language="JavaScript">
alert("<s:property escape="false"/>")
</script>
</s:iterator>
</s:if>

//actionmessage
<s:if test="hasActionMessages()">
<s:iterator value="actionMessages">
<script language="JavaScript">
alert("<s:property escape="false"/>")
</script>
</s:iterator>
</s:if>

//打印轉換好格式的fielderror信息
<s:if test="#msg.length()>0">
<script language="JavaScript">
alert("<s:property escape='false' value='#msg'/>")
</script>
</s:if>
</body>
</html>

另外還有一種方法直接在script代碼中嵌入struts2標籤:

view plaincopy to clipboardprint?
struts2.0彈出驗證
<!--用javascript驗證 -->
<s:if test="hasFieldErrors()">
<script language="JavaScript">
var msg = '';
<s:iterator value="fieldErrors">
<s:iterator value="value">
msg=msg+'<s:property/>'+'\n';
</s:iterator>
</s:iterator>
alert(msg);
</script>
</s:if>&nbsp;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章