Tôi chỉ cần trang được liên kết @RequestScoped
bean sao lưu. Tôi truy cập trang này từ trang khác mà trên đó tôi đã chuyển thông số "project". Vì vậy, khi tôi nhận được trên trang bên phải tôi có url như contextRoot/faces/jsf.xhtml?project=123
.Giữ lại các tham số yêu cầu GET ban đầu trên postbacks
Xem:
<f:metadata>
<f:viewParam name="project" value="#{entityBean.projectId}" />
</f:metadata>
...
<p:commandButton value="#{msg['button.add']}"
actionListener="#{entityBean.addNewEntity((entityName),(entityDescritpion))}"
ajax="true" update=":projectDetailForm"/>
Sao đậu:
@Named("entityBean")
@RequestScoped
public class EntityBean implements Serializable{
private String projectId;
@PostConstruct
public void init() {
params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
for (Map.Entry<String, String> entry : params.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
if (params.get("project") != null) {
projectId = params.get("project");
} else {
HttpServletRequest request =
(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String projectId = request.getParameter("project");
}
}
//projectId getter and setter
//public void addNewEntity(String name, String desc) {}
}
Tất cả mọi thứ hoạt động tốt khi trang được mở ra lần đầu tiên. Tham số GET được xử lý thành công. Tuy nhiên, khi bean được yêu cầu phạm vi, nó bị hủy bởi kết thúc yêu cầu và được tạo lại trên (các) postback tiếp theo. Trong các postback này, tham số GET không còn khả dụng nữa mặc dù nó có thể nhìn thấy trong thanh địa chỉ trình duyệt. Tôi đã thử ba phương pháp lấy thông số bởi f:viewParam
và ExternalContext
và thậm chí từ ServletContext
nhưng tôi không thể nhận được các thông số đó.
Tôi không muốn thay đổi @RequestScoped
thành @SessionsScoped
và tôi không thể sử dụng @ViewScoped
, vì tôi đang sử dụng hạt CDI và tôi không muốn kết hợp chúng.
thay đổi Phạm vi Bean từ "yêu cầu" thành "Chế độ xem". – KSHiTiJ
@kshitij: thật không may, OP đang sử dụng CDI thay vì JSF để quản lý đậu. Vì vậy, phạm vi xem cụ thể JSF sẽ không hoạt động. OP cũng đã đề cập rõ ràng nó trong câu cuối cùng của câu hỏi. – BalusC