1

我在java文件中有字符串类型方法,它包含字符串数组,当我尝试调用jsp时,它给了我一个错误。

public String[] ordering(ActionRequest actionRequest,ActionResponse actionResponse)  
    throws IOException,PortletException

JSP:

<% 
  TestiPortlet obj=new TestiPortlet();
  String str[]=obj.ordering(actionRequest,actionResponse);
  out.println(str[0]);
%>

错误:

Multiple annotations found at this line:- actionResponse cannot be resolved to a     variabl-actionRequest cannot be resolved to a variable

    Stacktrace:
    javax.portlet.PortletException: org.apache.jasper.JasperException: An exception occurred processing JSP page /html/testi/list.jsp at line 8

    5: 
    6: <% 
    7:   TestiPortlet obj=new TestiPortlet();
    8:   String str[]=obj.ordering(actionRequest,actionResponse);
    9:   out.println(str[0]);
    10: %>
    11: 
4

1 回答 1

5

错误说明了一切,您的 jsp 没有找到actionRequestactionResponse反对。

这些对象需要通过在 JSP 的顶部包含以下代码来包含在 JSP 中:

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>

<portlet:defineObjects />

正如@RasabihariKumar 正确提到的那样,这不是Portlet应该如何使用类的方式。对于测试或学习,这可能很好,但对于实际项目,我认为这不是一个好的做法,因为这些是昂贵的对象,而且使用 Portlet 作为实用程序类来处理这样的数据似乎并不正确,它打破了凝聚力的原则。

Portlet 类应该用于发送请求(通过使用renderURLoractionURLresourceURL)并获得响应,就像我们对 servlet 所做的那样。

在他的评论后编辑:

您可以通过 wiki 获得有用的学习资源链接,我会推荐开发人员指南和书籍Liferay in Action,以及Portlet in Action在 liferay 中开发 portlet 的最佳方式。

目前,最简单的方法是在您的 portlet 的方法中编写代码,doView当您的 portlet JSP 页面被渲染时,该方法将被调用,只需从您的数据库中检索列表doView并作为请求属性输入:

renderRequest.setAttribute("listAttr", listFromDatabase)

然后listAttr在 JSP 中使用它作为:

String[] str = (String[]) renderRequest.getAttribute("listAttr");

浏览由 liferay 开发的示例 portlet的源代码也可能会有所帮助。

于 2013-04-24T05:03:58.513 回答