首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据设置为ActionResponse Portlet GateIn

将数据设置为ActionResponse Portlet GateIn
EN

Stack Overflow用户
提问于 2013-09-02 13:51:34
回答 2查看 874关注 0票数 0

我正在为GateIn 3.6开发portlet。目前,我已经创建了一个页面,其中列出了表中的记录。当用户单击任何行时,就需要使用描述页。

现在,当用户单击行时,它将加载详细信息页,但值不可用。我正在做的细节在这里..。

代码语言:javascript
复制
    @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 = "";
    }

而过程动作是

代码语言:javascript
复制
    @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页面中使用这些值,这样我就可以加载详细信息页。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-02 23:02:44

这一行代码

代码语言:javascript
复制
response.setRenderParameter("details", recordsForm);

将只将recordsForm对象作为参数传递给doView方法。您的JSP很可能试图在RenderRequest上使用属性。这意味着在您的doView中,您需要执行如下操作

代码语言:javascript
复制
RecordsForm recordsForm = request.getParameter("details");
request.setAttribute("details", recordsForm);

还有一个选项可以使用portlet容器运行时选项javax.portlet.actionScopedRequestAttributes。您可以在您的portlet.xml中设置它,它应该接受在操作方法中设置的属性,并将它们作为属性提供给您的呈现方法,从而消除了将对象从参数映射移动到属性映射的需要。

不相关的注意:看起来您在portlet中使用actionJsp作为对象变量。不建议这样做,因为portlets应该编码为线程安全。对象变量在用户和线程之间共享,因此在其中保存用户特定的状态数据将在获得多个用户时导致错误。

票数 1
EN

Stack Overflow用户

发布于 2013-09-03 13:16:58

在将actionScopedRequestAttributes添加到portlet.xml中之后,我能够在请求中设置值,这些值可以在jsp页面中使用。

代码语言:javascript
复制
    <container-runtime-option>
         <name>javax.portlet.actionScopedRequestAttributes</name>
         <value>true</value>
    </container-runtime-option>

过程行动就是这样的事情

代码语言:javascript
复制
@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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18574875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档