Thẻ property, push và set trong Struts 2
Thẻ property được sử dụng để lấy thuộc tính của một giá trị, mà mặc định sẽ là ở trên cùng của Stack nếu không có cái gì được xác định. Ví dụ dưới đây minh họa cho bạn cách sử dụng của ba thẻ là set, push và Thuộc tính.
Tạo các lớp Action
Chúng ta tái sử dụng ví dụ trong chương Chuyển đổi kiểu dữ liệu nhưng với một số thay đổi nhỏ. Dưới đây là lớp POJO có tên là Environment.java.
package com.vietjack.struts2; public class Environment { private String name; public Environment(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Chúng ta có lớp sau:
package com.vietjack.struts2; import com.opensymphony.xwork2.ActionSupport; public class SystemDetails extends ActionSupport { private Environment environment = new Environment("Development"); private String operatingSystem = "Windows XP SP3"; public String execute() { return SUCCESS; } public Environment getEnvironment() { return environment; } public void setEnvironment(Environment environment) { this.environment = environment; } public String getOperatingSystem() { return operatingSystem; } public void setOperatingSystem(String operatingSystem) { this.operatingSystem = operatingSystem; } }
Tạo các thành phần View
System.jsp với nội dung sau:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>System Details</title> </head> <body> <p>Thuoc tinh name cua environment co the duoc truy cap theo ba cach:</p> (Phuong thuc 1) Environment Name: <s:property value="environment.name"/><br/> (Phuong thuc 2) Environment Name: <s:push value="environment"> <s:property value="name"/><br/> </s:push> (Phuong thuc 3) Environment Name: <s:set name="myenv" value="environment.name"/> <s:property value="myenv"/> </body> </html>
Chúng ta cùng phân tích 3 tùy chọn trên:
Trong phương thức đầu tiên, chúng ta sử dụng thẻ property để lấy giá trị của tên của environment. Khi biến environment là trong lớp action, nó tự động có sẵn trong Value Stack. Chúng ta có thể trực tiếp tham chiếu tới nó bởi sử dụng thuộc tính environment.name. Phương thức 1 làm việc tốt khi bạn đã giới hạn số thuộc tính trong một lớp. Mỗi khi bạn cần tham chiếu các biến này, bạn cần thêm tiền tố "environment.". Đây là nơi thẻ push cần đến.
Trong phương thức thứ hai, chúng đẩy thuộc tính "environment" tới Stack. Vì thế bây giờ bên trong phần thân thẻ push, thuộc tính environment là có sẵn tại root của stack. Bây giờ bạn có thể tham chiếu tới thuộc tính này khá dễ dàng như trong ví dụ.
Trong phương thức cuối cùng, chúng ta sử dụng thẻ set để tạo một biến mới gọi là myenv. Giá trị của biến này được thiết lập là environment.name. Vì thế bây giờ chúng ta có thể sử dụng biến này ở bất cứ nơi nào chúng ta tham chiếu tên của environment.
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="system" class="com.vietjack.struts2.SystemDetails" method="execute"> <result name="success">/System.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>
Bây giờ bạn chạy ứng dụng và kiểm tra kết quả.