我在 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:
错误说,这一切,你的JSP没有找到actionRequest和actionResponse对象。
actionRequest
actionResponse
这些对象需要包含在JSP中,方法是将这些代码放在JSP的顶部:
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%> <portlet:defineObjects />
正如@RasabihariKumar正确提到的那样,这不是使用Portlet类的方式。对于测试或学习,这可能很好,但是对于实际项目,我认为这不是一个好习惯,因为它们是昂贵的对象,并且使用Portlet作为Utility类来处理这样的数据似乎根本不正确。 ,它破坏了凝聚力的原则。
Portlet
就像我们对servlet所做的那样,应该使用Portlet类将请求发送(通过使用renderURL或actionURL或resourceURL)并获得响应。
renderURL
actionURL
resourceURL
您可以浏览liferay Wiki,以获得指向学习资源的有用链接,我建议开发人员指南和书籍,Liferay in Action以及Portlet in Action在liferay中开发portlet的最佳方法。
Liferay in Action
Portlet in Action
目前,最简单的方法是在doViewportlet JSP页面呈现时将在portlet的方法中编写代码,只需从您的数据库中检索列表doView并将其作为request属性放入:
doView
renderRequest.setAttribute("listAttr", listFromDatabase)
然后listAttr在JSP中将其用作:
listAttr
String[] str = (String[]) renderRequest.getAttribute("listAttr");
浏览liferay开发的样本portlet的源代码也可能会有所帮助。