Biểu thức OGNL trong Struts2

OGNL (Object-Graph Navigation Language) là một ngôn ngữ biểu thức được sử dụng để truy cập và thao tác các thuộc tính của đối tượng Java. Ngoài việc đặt và lấy giá trị, OGNL còn cung cấp các chức năng như lọc tập hợp, ánh xạ và biểu thức lambda. Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng OGNL trong Struts2. Đầu tiên, hãy xem cách lấy các thuộc tính đơn giản từ Stack Value. Các thuộc tính nào sẽ được bọc vào Stack Value? Trước hết là các tham số mặc định trong Action, tiếp theo là các tham số được truyền qua URL đến Action. Dưới đây là ví dụ về lớp Action:

public class MyAction extends ActionSupport {

    private String username; // Thuộc tính không có giá trị mặc định
    private Integer age = 18; // Thuộc tính có giá trị mặc định

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}
Sau khi thiết lập các thuộc tính này vào Stack Value, chúng ta có thể truy xuất chúng trong trang JSP như sau:

<ol>
    <li>Truy cập thuộc tính đơn giản: username: <s:property value="username" /></li>
    <li>Truy cập thuộc tính đơn giản: age: <s:property value="age" /></li>
    <li>Truy cập thuộc tính không tồn tại: password: <s:property value="password" /></li>
    <li><s:debug/></li>
</ol>
Yêu cầu URL: OGNL Expression ### Lấy giá trị từ đối tượng trong Stack Value Giả sử chúng ta muốn lấy giá trị từ một đối tượng `Person`. Đầu tiên, tạo lớp `Person`:

public class Person {
    private String name;
    private int age;

    public Person() {}

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Tiếp theo, cập nhật Action để chứa đối tượng `Person`:

public class MyAction extends ActionSupport {
    private Person person;

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}
URL yêu cầu: OGNL Expression Trong JSP, chúng ta có thể truy cập như sau:

<ol>
    <li>Truy cập thuộc tính của đối tượng: person.name: <s:property value="person.name" /></li>
    <li>Truy cập thuộc tính của đối tượng: person.age: <s:property value="person.age" /></li>
    <li><s:debug/></li>
</ol>
### Xử lý đối tượng với giá trị mặc định Nếu bạn muốn thiết lập giá trị mặc định cho đối tượng `Person`, bạn có thể làm như sau:

public class Person {
    private String name = "Unknown";
    private int age = 18;

    public Person() {}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Và Action:

public class MyAction extends ActionSupport {
    private Person person = new Person();

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}
Khi không truyền bất kỳ tham số nào qua URL, giá trị mặc định vẫn sẽ hiển thị trên trang JSP. ### Truy cập phương thức tĩnh và thuộc tính tĩnh Bạn cũng có thể truy cập các phương thức hoặc thuộc tính tĩnh từ Action thông qua OGNL:

<ol>
    <li>Truy cập thuộc tính tĩnh: YEAR: <s:property value="@com.example.action.MyAction@YEAR" /></li>
    <li>Truy cập phương thức tĩnh: GetDate(): <s:property value="@com.example.action.MyAction@GetDate()" /></li>
</ol>
Cấu trúc Action:

public class MyAction extends ActionSupport {
    public static final String YEAR = "2023";

    public static String GetDate() {
        return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}
### Làm việc với List, Set và Map Chúng ta có thể làm việc với các cấu trúc dữ liệu phức tạp như sau:

public class MyAction extends ActionSupport {
    private List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    private Set<Integer> numbers = new HashSet<>(Arrays.asList(1, 2, 3));
    private Map map = new HashMap<>();

    public MyAction() {
        map.put("key1", "value1");
        map.put("key2", "value2");
    }

    public List<String> getNames() {
        return names;
    }

    public Set<Integer> getNumbers() {
        return numbers;
    }

    public Map getMap() {
        return map;
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}
Trong JSP, truy cập như sau:

<ol>
    <li>List: <s:property value="names" /></li>
    <li>Set: <s:property value="numbers" /></li>
    <li>Map: <s:property value="map['key1']" /></li>
</ol>

Thẻ: struts2 ognl JSP

Đăng vào ngày 12 tháng 6 lúc 19:50