Pass JSF Get Parameter Truyền Tham số GET trong JSF

How to pass request parameters in URL between JSF Pages Truyền tham số request trên URL (GET Parameter) giữa những trang JSF. JSF không hỗ trợ phương thức get, điều này là tốt, tuy nhiên tự nó đã giới hạn khả năng của nó, không phải POST luôn luôn đúng trong mọi trường hợp, bây giờ giả sử tôi muốn tạo ra một bài viết mà người đọc có thể bookmark để đọc cho lần sau, nếu cứ bắt người người dùng thao tác lần lượt: 1. Vào trang chủ 2. Chọn chuyên mục. 3. Kéo và cuộn chọn bài viết lần trước đã đọc. POST trong trường hợp này phiền phức. Người sử dụng sẽ bỏ ngay trang web này vô tình JSF tạo ra điểm yếu (Bổ sung vào danh sách ........yếu đuối của JSF). Một cách để pass tham số get parameter này. Thông thường bạn sẽ làm như sau: Bạn sẽ sử dụng một outputLink, giống như sau: < h:outputLink value="animal.faces ? ten=conga& gioitinh=mai"> <f :verbatim> con ga mai < /f:verbatim>< / h : outputLink > Và Tạo một Bean Animal: public class AnimalController { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } } Và không quên khai báo trong Faces-config.xml <managed-bean> <managed-bean-name>animal< /managed-bean-name> <managed-bean-class> com.jsf.get.demo.AnimalController managed-bean-class> <managed-bean-scope>request< / managed-bean-scope> name< /manage-property> #{param.ten} sex #{param.gioitinh} managed-bean> Và cuối cùng, sử dụng nó, bạn viết mã trong animal.jsp <h:form> <h:outputText id="param1" value="#{animal.name}" /> <h:inputText id="param2" value="#{animal.sex}" /> h:form> Tới đây, Tôi đã giải quyết được vấn đề get Parameter trong JSF. Tuy nhiên bây giờ tôi có mong muốn sử dụng các tham số này để tiếp tục sử dụng trong các trang kế tiếp (Trường hợp UserName-Password chẳng hạn ==> Ví dụ thôi nhá) Tôi sửa ngay scope của bean từ request sang session và mong đợi kết quả tuy nhiên error xuất hiện. Bời vì param map là readonly, vì thế update model phase trong vòng đời sẽ bị lỗi. Để tránh điều này. Trong backing bean, định nghĩa một getter/setter nếu biến là null khởi tạo nó với expressionResolver private String name; public String getName() { if (name == null) { name = (String) expressionResolver("#{param.ten}"); } return name; } public void setName(String name) { this.name = name; } public Object expressionResolver(String expression) { Object value = null; if ((expression.indexOf("#{") != -1) && (expression.indexOf("#{") <> value = getFacesContext().getApplication().createValueBinding(expression).getValue(getFacesContext()); } else { value = expression; } return value; } Và xong, bây giờ tôi sẽ không cần quản lý property cho tham số này nữa, quản lý Bean trong faces-config như sau: <managed-bean> <managed-bean-name>animalmanaged-bean-name> <managed-bean-class> com.jsf.get.demo.AnimalController managed-bean-class> <managed-bean-scope>sessionmanaged-bean-scope> managed-bean> Tham số truyền http://localhost:8080/JSFGet/result.faces?ten=conga&gioitinh=mai sẽ hoạt động ở lần đầu tiên sau đó animal sẽ nằm trong session và tôi sẽ tham khảo nó khi nào tôi muốn.

About Langthang

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

1 comments :

  1. Bạn ơi mình không thể nào làm theo được :(, Bạn có thể viết rõ ràng hơn ko ?

    ReplyDelete