Liferay 中的动作是如何工作的?
How do actions work in Liferay?
我找过这个问题,但没有找到。
我不知道你的情况,但我一点也不了解 Liferay 教程。它太大且无法解释。这让我对 Actions 在 Liferay 中的工作方式和一对麻烦的测试产生了很大的误解。
鉴于此介绍,让我们快速了解一下:Liferay 操作如何工作?
我知道我们在方法中有 ActionRequests 和 ActionResponses,但是如何触发这些方法的 ActionRequest?我需要 renderURL 标签吗?能举个例子吗?
现在,在上一个问题之后,我应该能够在我的 Portlet class 控制器中调用一个方法...我如何将信息发送到客户端?我猜它正在使用 ActionResponse,但我该如何处理呢?
谢谢!
编辑:
我尝试了第一个答案,但我之前尝试过非常相似的东西。它不起作用,但我在控制台上收到此错误;我真的不知道这是否是个问题:
Load denied by X-Frame-Options:
https://www.google.es/?gfe_rd=ssl&ei=8Sc8V5OkBYGFaLiHksgO does not
permit cross-origin framing.
在你的 my_action.jsp
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
Hello : <b> <%=request.getAttribute("user-test") %></b>
<portlet:defineObjects />
//The name here is used to call the process action method you define for your action
<portlet:actionURL name="myAction" var="myActionUrl"></portlet:actionURL>
<aui:form action="${myActionUrl}">
<aui:input name="inputField"></aui:input>
<aui:button-row>
<aui:button type="cancel" />
<aui:button type="submit" value="save" />
</aui:button-row>
</aui:form>
并且比 portlet class
public class CustomMVCPortlet extends MVCPortlet {
public void myAction(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException, PortalException, SystemException{
//get value inserted in form
String userName = ParamUtil.get(actionRequest, "inputField", StringPool.BLANK);
//her you send back your data to use in the jsp
actionRequest.setAttribute("user-test", userName);
}
从动作到方法的映射是使用 actionRequest.setAttribute 中的名称和 class 中方法的名称完成的,它扩展了 MVCPortlet 并使用标签 <portlet-class>fully.qulified.name</portlet-class>
进行了定义WEB-INF/portlet.xml
如果未找到任何方法,则抛出 PortletException
我找过这个问题,但没有找到。
我不知道你的情况,但我一点也不了解 Liferay 教程。它太大且无法解释。这让我对 Actions 在 Liferay 中的工作方式和一对麻烦的测试产生了很大的误解。
鉴于此介绍,让我们快速了解一下:Liferay 操作如何工作?
我知道我们在方法中有 ActionRequests 和 ActionResponses,但是如何触发这些方法的 ActionRequest?我需要 renderURL 标签吗?能举个例子吗?
现在,在上一个问题之后,我应该能够在我的 Portlet class 控制器中调用一个方法...我如何将信息发送到客户端?我猜它正在使用 ActionResponse,但我该如何处理呢?
谢谢!
编辑:
我尝试了第一个答案,但我之前尝试过非常相似的东西。它不起作用,但我在控制台上收到此错误;我真的不知道这是否是个问题:
Load denied by X-Frame-Options: https://www.google.es/?gfe_rd=ssl&ei=8Sc8V5OkBYGFaLiHksgO does not permit cross-origin framing.
在你的 my_action.jsp
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
Hello : <b> <%=request.getAttribute("user-test") %></b>
<portlet:defineObjects />
//The name here is used to call the process action method you define for your action
<portlet:actionURL name="myAction" var="myActionUrl"></portlet:actionURL>
<aui:form action="${myActionUrl}">
<aui:input name="inputField"></aui:input>
<aui:button-row>
<aui:button type="cancel" />
<aui:button type="submit" value="save" />
</aui:button-row>
</aui:form>
并且比 portlet class
public class CustomMVCPortlet extends MVCPortlet {
public void myAction(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException, PortalException, SystemException{
//get value inserted in form
String userName = ParamUtil.get(actionRequest, "inputField", StringPool.BLANK);
//her you send back your data to use in the jsp
actionRequest.setAttribute("user-test", userName);
}
从动作到方法的映射是使用 actionRequest.setAttribute 中的名称和 class 中方法的名称完成的,它扩展了 MVCPortlet 并使用标签 <portlet-class>fully.qulified.name</portlet-class>
进行了定义WEB-INF/portlet.xml
如果未找到任何方法,则抛出 PortletException