在Struts中可以在一個訊息資源檔中統一管理訊息,您可以在struts-config.xml中設定資源檔名稱及位置,例如:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <action-mappings> <action path="/hello" type="onlyfun.caterpillar.HelloAction"> <forward name="helloUser" path="/WEB-INF/pages/hello.jsp"/> </action> </action-mappings> <message-resources parameter="resources/messages"/> </struts-config>
在<message-resources>標籤中設定了資源檔位置為
resources/messages,這表示將使用CLASSPATH下的resources/messages.properties檔案,例如您可
以將之放在/WEB-INF/classes/resources/messages.properties下,資源檔內容如下:
welcome.helloWord=Hello! welcome.message=This is your secret gift!!
配合訊息資源檔,來寫個簡單的 Action
測試一下訊息管理:
package onlyfun.caterpillar;
import java.util.*; import javax.servlet.http.*; import org.apache.struts.action.*; import org.apache.struts.util.MessageResources;
public class HelloAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { MessageResources messageResources = getResources(request); String helloWord = messageResources.getMessage("welcome.helloWord"); String message = messageResources.getMessage("welcome.message"); // get information from request object String username = request.getParameter("user"); // prepare model Map model = new HashMap(); model.put("helloWord", helloWord); model.put("message", message); if(username != null) model.put("username", username); else model.put("username", "nobody"); // pass information to View by using reqeust object request.setAttribute("userInfo", model); // no more carrying information from client request.removeAttribute("user"); return mapping.findForward("helloUser"); } }
這邊使用繼承Action下來的getResources()取得一個MessageResources物件,當中包括了 messages.properties的訊息,然後使用它的getMessage()指定鍵值來取得對應訊息,來寫一個簡單的JSP網頁測試一下:
<html> <head> <title> ${userInfo["helloWord"]} ${userInfo["username"]}! </title> </head> <body>
<H1>${userInfo["helloWord"]} ${userInfo["username"]} !</H1> <H1>${userInfo["message"]}</H1>
</body> </html>
依上面的設定,如果依下面的方式請求:
http://localhost:8080/strutsapp/hello.do?user=Justin
則將傳回以下的結果:
<html>
<head>
<title>
Hello! Justin !
</title>
</head>
<body>
<H1>Hello! Justin !</H1>
<H1>This is your secret gift!!</H1>
</body>
</html>
|