我浏览了Liferay文档和许多其他教程。但我仍然对完成我的要求感到震惊。
这是我需要实现的目标: 1.)在Wiki(内置)Portlet中创建新的自定义按钮或链接(href)(在portlet中的任何位置) 2.)单击该按钮时,我只想在该portlet中打开一个新的jsp页面。
这就是我所做的: 我创建了一个Liferay-hook项目,并选择了/wiki/view.jsp进行自定义。 添加了一个按钮:
<liferay-ui:icon image="history" label="<%= true %>"
message="Notify Users" method="get"
url=<%="/c/portal/sample"%>" />
这是我的liferay hook.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.1.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_1_0.dtd"><hook><custom-jsp-dir>/META-INF/custom_jsps</custom-jsp-dir>
<struts-action>
<struts-action-path>/wiki/testing</struts-action-path>
<struts-action-impl>
com.liferay.sample.hook.action.WikiEmailHandlerAction
</struts-action-impl>
</struts-action> <struts-action><struts-action-path>/portal/sample</struts-action-path><struts-action-impl>
com.liferay.sample.hook.action.WikiEmailHandlerAction
</struts-action-impl>
其中,WikiEmailHandlerAction是我的Java类,它扩展了BaseStrutsPortletAction。 当我点击“通知用户”按钮时,它正在打开新的jsp页面(但不是在portlet中,而是作为一个新页面。 Liferay专家,请让我知道如何满足这一要求。
答案 0 :(得分:1)
你的jsp打开整个页面是由于/ c / portal / sample url。
您应该使用一些参数集创建renderURL。在Overridden StrutsAction类的render方法中检查该参数并渲染自定义jsp。
同样go for action方法,在actionURL中设置一些参数,并在Overridden StrutsAction类的processAction中检查该参数。
答案 1 :(得分:1)
首先,你的liferay-hook.xml看起来不合适。它还应该有一个元素,它应该指向你的钩子里面的文件夹,你可以放置Wiki portlet的自定义view.jsp。
<custom-jsp-dir>/custom_jsps</custom-jsp-dir>
此文件夹还应包含您在单击按钮时要打开的其他JSP文件。
注意:在portlet环境中,只能通过超链接路径来打开jsp。它将由您的Web容器作为独立的jsp提供。因此,您必须生成PortletURL,并从Portlet / StrutsAction调度请求生成适当的JSP。
因此,在view.jsp中,您需要使用&lt; portlet:renderURL&gt;创建一个PortletURL。或&lt; portlet:actionURL&gt;根据您的要求标记(如上面提到的Pankaj)。
或者,另一个更简单的解决方案(或者更确切地说)是使用JQuery.ajax并使用Ajax加载JSP的内容。