Thẻ action trong Struts 2
Thẻ này cho phép lập trình viên gọi các action một cách trực tiếp từ một JSP page bằng việc xác định tên action và một namespace tùy ý. Phần thân thẻ được sử dụng để truyền các result từ Action. Bất kỳ result processor nào được định nghĩa cho action này trong struts.xml sẽ bị bỏ qua, trừ khi tham số executeResult được xác định.
Tạo lớp Action
package com.vietjack.struts2; public class HelloWorldAction{ private String name; public String execute() throws Exception { return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Tạo các thành phần View
HelloWorld.jsp để minh họa sự sử dụng của thẻ generator:
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Hello World</title> </head> <body> <h2>Vi du cua the generator</h2> <h3>Rainbow bao gom cac mau:</h3> <s:generator val="%{'Violet,Indigo,Blue, Green,Yellow,Orange,Red '}" count="7" separator=","> <s:iterator> <s:property /><br/> </s:iterator> </s:generator> </body> </html>
employees.jsp có nội dung sau:
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>Employees</title> </head> <body> <s:action name="hello" executeResult="true"> Output from Hello: <br /> </s:action> </body> </html>
Tạo các file cấu hình
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="hello" class="com.vietjack.struts2.HelloWorldAction" method="execute"> <result name="success">/HelloWorld.jsp</result> </action> <action name="employee" class="com.vietjack.struts2.Employee" method="execute"> <result name="success">/employee.jsp</result> </action> </package> </struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts 2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Như bạn có thể thấy trong ví dụ này, chúng ta đã xác định giá trị của executeResult là true. Vì thế, kết quả của hello.action được truyền trực tiếp trong trang. HelloWorld.jsp in các màu của rainbow, mà bây giờ được truyền trực tiếp bên trong employee.jsp.
Bây giờ chúng ta sửa đổi một chút HelloWorldAction.java.
package com.vietjack.struts2; import java.util.ArrayList; import java.util.List; import org.apache.struts2.ServletActionContext; public class HelloWorldAction{ private String name; public String execute() { List names = new ArrayList(); names.add("Robert"); names.add("Page"); names.add("Kate"); ServletActionContext.getRequest().setAttribute("names", names); return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Sửa đổi employee.jsp như sau:
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>Employees</title> </head> <body> <s:action name="hello" executeResult="false"> Output from Hello: <br /> </s:action> <s:iterator value="#attr.names"> <s:property /><br /> </s:iterator> </body> </html>
Bây giờ bạn chạy ứng dụng và kiểm tra kết quả.