我正在为GateIn 3.6开发portlet。目前,我已经创建了一个页面,其中列出了表中的记录。当用户单击任何行时,就需要使用描述页。
现在,当用户单击行时,它将加载详细信息页,但值不可用。我正在做的细节在这里..。
@RenderMode(name = "view")
public void display(RenderRequest request, RenderResponse response) throws PortletException, IOException, NamingException {
RecordsDAO recordsDAO = new RecordsDAOImpl();
// Records listing available on listing page
request.setAttribute("recordsList", recordsDAO.getAllRecords());
// tried to load record detail page when user click one row
if(actionJsp == null || actionJsp.equals("")){
getPortletContext().getRequestDispatcher("/jsp/ListRecords.jsp").
include(request, response);
} else {
getPortletContext().getRequestDispatcher("/jsp/DetailsBoxRecord.jsp").
include(request, response);
}
actionJsp = "";
}而过程动作是
@ProcessAction(name = "details")
public void details(ActionRequest request, ActionResponse response) throws PortletException, IOException {
RecordsDAO recordsDAO = new RecordsDAOImpl();
int id = Integer.parseInt(request.getParameter("id"));
RecordsForm recordsForm = recordsDAO.getRecord(id);
// way 1 set request attribute
request.setAttribute("details", recordsForm);
// way 2 set response attribute -- display error that cannot set Form type values
response.setRenderParameter("details", recordsForm);
actionJsp = "values";
}Option1:我尝试在request.setAttribute中设置RecordsForm类型值,它已经完成了,但是请求中的值在jsp页面中不可用。
Option2:使用response.setRenderParameter,我无法在response.setRenderParameter中设置RecordsForm类型值来访问jsp页面中的这些值。
在我的情况下,请任何人指导我哪一种方法是正确的,以及如何在jsp页面中使用这些值,这样我就可以加载详细信息页。
发布于 2013-09-02 23:02:44
这一行代码
response.setRenderParameter("details", recordsForm);将只将recordsForm对象作为参数传递给doView方法。您的JSP很可能试图在RenderRequest上使用属性。这意味着在您的doView中,您需要执行如下操作
RecordsForm recordsForm = request.getParameter("details");
request.setAttribute("details", recordsForm);还有一个选项可以使用portlet容器运行时选项javax.portlet.actionScopedRequestAttributes。您可以在您的portlet.xml中设置它,它应该接受在操作方法中设置的属性,并将它们作为属性提供给您的呈现方法,从而消除了将对象从参数映射移动到属性映射的需要。
不相关的注意:看起来您在portlet中使用actionJsp作为对象变量。不建议这样做,因为portlets应该编码为线程安全。对象变量在用户和线程之间共享,因此在其中保存用户特定的状态数据将在获得多个用户时导致错误。
发布于 2013-09-03 13:16:58
在将actionScopedRequestAttributes添加到portlet.xml中之后,我能够在请求中设置值,这些值可以在jsp页面中使用。
<container-runtime-option>
<name>javax.portlet.actionScopedRequestAttributes</name>
<value>true</value>
</container-runtime-option>过程行动就是这样的事情
@ProcessAction(name = "details")
public void details(ActionRequest request, ActionResponse response) throws PortletException, IOException {
RecordsDAO recordsDAO = new RecordsDAOImpl();
int id = Integer.parseInt(request.getParameter("id"));
RecordsForm recordsForm = recordsDAO.getRecord(id);
request.setAttribute("details", recordsForm);
}https://stackoverflow.com/questions/18574875
复制相似问题