ajax – 如何调用portlet.java类的特定方法而不是覆盖serveResou
我想在ajax的liferay中得到一些帮助.
现在我从我的view.jsp页面调用ajax方法来提交一些数据. 这是我在view.jsp中使用的示例代码: <%@ include file="/init.jsp"%> <portlet:actionURL name="AddTest" var="add1" /> <portlet:resourceURL id="AddTest" var="AddTest"></portlet:resourceURL> <html> <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> <script type="text/javascript"> function addToDo(addToDo){ var todo =document.getElementById('toDo').value; $.ajax({ url :addToDo,data: {"todo":todo,"CMD":"addToDo"},type: "GET",dataType: "text",success: function(data) { $("#toDoList").html(data); } }); } </script> </head> <body> <portlet:resourceURL var="addToDo" id="addToDo"></portlet:resourceURL> <form> <input type="text" name="toDo" id="toDo"> <button name="Add" type="button" onclick="addToDo('<%=addToDo%>')">Add</button> <div id="toDoList"> </div> </form> </body> </html> 在我的portlet.java类中,有一个方法由这个ajax调用调用: @Override public void serveResource(ResourceRequest request,ResourceResponse response){ if(request.getParameter("CMD").equals("addToDo")) { System.out.println("came here for add"); mediatype userToDo = new mediatypeImpl(); //userToDo.setMediaId(12345); try { userToDo.setPrimaryKey((CounterLocalServiceUtil.increment())); userToDo.setMedianame(request.getParameter("todo")); mediatypeLocalServiceUtil.addmediatype(userToDo); } catch (SystemException e) { e.printStackTrace(); } } } 所以我的问题是,现在它只是默认来自任何ajax类的@override方法. 我是阿贾克斯的新蜜蜂.所以请你指导我,你可以…… 使用以下url调用ajax时出现以下错误 <portlet:actionURL name="ajax_AddAdvertise" var="addToDo" windowState="<%= LiferayWindowState.EXCLUSIVE.toString()%>"> </portlet:actionURL> 06:47:03,705 ERROR [http-bio-8080-exec-23][render_portlet_jsp:154] java.lang.NoSuchMethodException: emenu.advertise.portlet.RestaurantPortlet.ajax_AddAdvertise(javax.portlet.ActionRequest,javax.portlet.ActionResponse) at java.lang.Class.getMethod(Class.java:1605) 我的流程动作方法如下 @ProcessAction(name = "ajax_AddAdvertise") public void ajax_AddAdvertise(ResourceRequest request,ResourceResponse response) { } 解决方法
我认为我们不能有两个不同版本的serveResource方法,就像我们为动作方法做的那样,至少不是默认实现. 如果你想要不同的方法,你必须采用Spring MVC ( 您仍然可以使用resourceId在serveResource方法中定义不同的逻辑,如下所示(a full example): 在JSP中: <portlet:resourceURL var="myResourceURL" id="myResourceID01" /> 在portlet类中,serveResource方法将包含以下代码: String resourceID = request.getResourceID(); if(resoureID.equals("myResourceID01")) { // do myResourceID01 specific logic } else { // else do whatever you want } 请记住[重要] 在this comment之后编辑: 人们使用< portlet:actionURL> ajax通常用于< form> -POST. 为此,actionURL在jsp中以稍微不同的方式生成,如下所示: <portlet:actionURL name="ajax_AddAdvertise" var="addToDo" windowState="<%= LiferayWindowState.EXCLUSIVE.toString()%>"> </portlet:actionURL> 在你的portlet中你可以(如问题所示): @ProcessAction(name = "ajax_AddAdvertise") public void ajax_AddAdvertise(ActionRequest request,ActionResponse response) { // ... your code } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |