这就是我想做的。我想从jsf page1的数据可在jsf page2这是由page1打开的弹出窗口。两者都有单独的托管bean。我尝试使用会话,但它导致空指针。我设法在javascript中使用window.opener()获得page2中的数据。现在,我希望这些数据在FacesPortlet的processAction()方法中可用。尝试使用请求。getParameter,请求。getAttributes,所有这些都是徒劳的。经过大量的研究,我设法在processAction()方法中发送一些硬编码数据。但是我无法从page1发送值。下面是我发送硬编码值的方法。
<form name="uploadbaseline" method="post"
enctype="multipart/form-data" action="<portlet:actionURL><portlet:param name = "page" value = "someval"/></portlet:actionURL>">
后面跟着表单中的其他字段。我在processAction()方法中获得这样的值
System.out.println("valuefrompage1"+request.getParameter("page"));
返回"someval"。现在我尝试使用javascript使用以下代码从page1分配值。
var val = window.opener.document.getElementById("BaseLine:EngineModel").value;
var actionval = "<portlet:actionURL><portlet:param name='page' value=" + val.value + "/></portlet:actionURL>";
document.uploadbaseline.action = actionval.value;
document.uploadbaseline.submit();
这将返回值"+ value .value +",而不是"val"变量中的实际值。
请给我指路。热切期待您的回复。谢谢。
终于找到了解决方案。问题在于我的表单的enctype属性。这使我无法使用常规的request.getParameter访问页面字段。这需要用另一种方式来处理。
for (Iterator requestItems = upload.parseRequest(request).iterator(); requestItems.hasNext();) {
item = (FileItem) requestItems.next(); // Get each item in the request
if (!item.isFormField()) {
//handle the file data
} else {
System.out.println((String)item.getString());
}
}