2013-03-11 49 views
7

在我的JSP中,我有以下代码:Liferay的<门户:actionURL>

<portlet:actionURL name="addDetails" var="addDetailsURL" /> 
<aui:form name="addDetails" action="<%=addDetailsURL.toString() %>" method="post" > 
     <aui:input type="text" label="name:" name="name" value="" /> 
     <aui:input type="text" label="surname:" name="surname" value="" /> 
     <aui:input type="text" label="age:" name="age" value="" /> 
     <aui:button type="submit" value="addDetails" /> 
</aui:form> 

我使用的Liferay。我想提交将在Java类中处理的这些数据。 我的java类功能很少。我应该如何在上面的jsp中指定它应该在提交表单后访问java中的特定函数?

回答

14

如果您的portlet继承MVCPortlet,只需创建一个公共方法具有相同的“名称”作为actionURL,接受一个ActionRequestActionResponse说法:

public void addDetails(ActionRequest req, ActionResponse rsp) { 
    // ... 
} 
+0

perp:所以在我的actionURL上面: name是addDetails,所以我的函数名应该是addDetails,对不对? – 2013-03-11 06:57:32

+0

@cyk:你明白了。 – perp 2013-03-11 08:13:38

+0

谢谢!清除我的疑惑 – 2013-03-11 08:41:28

6

如果你想处理只有一个动作:

的Portlet

@Override 
public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException 
{ 
    // TODO Auto-generated method stub 
    super.processAction(actionRequest, actionResponse); 
} 

JSP

<form action="<portlet:actionURL />" method="post"> 
    <aui:button type="submit" value="addDetails" /> 
</form> 

如果你想要一个以上的操作方法:

public void myAction(ActionRequest request, ActionResponse response) 
{ 
    Long id = ParamUtil.getLong(request, "myParam"); 
    // TODO 
} 

JSP

<portlet:actionURL name="myAction" var="myActionVar"> 
    <portlet:param name="myParam" value="${currentElement.id}"></portlet:param> 
</portlet:actionURL> 

<a href="${myActionVar}">Click Me!</a> 

但你可能会做:

的Portlet

@Override 
public void serveResource(ResourceRequest request, ResourceResponse response) throws IOException 
{ 
    String action = request.getParameter("action"); 

    if(action.equalsIgnoreCase("myAction")){ 
     // handle AJAX call 
    } 
} 

JSP

<portlet:resourceURL var="resourceUrl" /> 
<input id="resourceURL" type="hidden" value="${resourceUrl}" /> 

的JavaScript

$.post($('#resourceURL').val(),{ 
    action : 'myAction' 
}).done(function(result){ 
    alert('Action completed successfully!') 
}); 
+0

如果我有在Java类的许多功能?那么它将如何知道它应该去哪个功能? – 2013-03-11 06:53:35

+0

我已经更新了我的答案。接受它,如果它的任何帮助:) – kayz1 2013-03-11 07:12:49

9

只是为了记录在案,你也可以使用注释。例如,你有这样的jsp:

<portlet:actionURL var="urlAction"> 
    <portlet:param name="javax.portlet.action" value="myAction"/> 
</portlet:actionURL> 

<aui:form action="${urlAction}" method="post"> 
    <aui:input type="text" label="name:" name="name" value="" /> 
    <aui:button type="submit" value="Submit" /> 
</aui:form> 

而这个Java方法在MVCPortlet

@ProcessAction(name = "myAction") 
public void method(ActionRequest actionRequest, ActionResponse actionResponse) { 
    // ... 
} 
3

如果你不使用MVCPortlet而是像了GenericPortlet,设置了一个param添加到这样的actionURL :

<portlet:actionURL name="addDetails" var="addDetailsURL" > 
<portlet:param name="method" value="addDetails"/> 
</portlet:actionURL> 

然后在您的processAction方法,处理检查方法类型是这样的:

public void processAction(ActionRequest aReq, ActionResponse aResp) throws IOException, 
      PortletException { 

     final String method = aReq.getParameter("method"); 

     if (method != null && method.equals("addDetails")) 
     { 
      addDetails(aReq, aResp); 

     } 
1

如果您的java类正在扩展MVCPortlet,那么方法名称应该与actionURL名称(即addDetails)匹配。如果类正在扩展GenericPortlet,则必须在方法的顶部为@ProcessAction(name =“addDetails”)指定相同的注释。在这种情况下,您的方法名称可能会有所不同。

2

在你的控制器类

public void addDetails(ActionRequest actionRequest, ActionResponse actionResponse) { 
    //this method will be called on submitting the form 
    System.out.println("addDetails"); 
} 

粘贴,或者你可以使用它作为

@ProcessAction(name="addDetails") 
public void myaddDetails(ActionRequest actionRequest, ActionResponse actionResponse) { 
    //this method will be called on submitting the form 
    System.out.println("addDetails"); 
}