gpt4 book ai didi

ajax - 如何调用portlet.java类的特定方法而不是重写serveResource方法?

转载 作者:行者123 更新时间:2023-11-30 23:55:56 25 4
gpt4 key购买 nike

我需要一些有关liferay 和ajax 的帮助。现在,我正在从 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 方法。但是如何在 ajax 调用中调用 portlet.java 类的特定方法呢?

我是 ajax 的新手。所以无论如何请指导我......

使用以下 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) {

}

最佳答案

how can I call specific method of portlet.java class on ajax call?

我认为我们不能有 serveResource 的两个不同版本像我们对操作方法所做的那样的方法至少不是默认实现。

如果你想要不同的方法,你必须去 Spring MVC ( @ResourceMapping )拥有这样的方式。

不过,您可以在 serveResource 中定义不同的逻辑。使用 resourceId 的方法如下(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
}

请牢记[重要]
在 portlet 中,您不应使用 <html> , <head> , <body>标签,因为 portlet 生成页面片段而不是整个页面。即使允许,您生成的页面也不会格式良好,并且在不同浏览器上的行为会有所不同。而且修改 DOM 元素的 javascript 将完全无用。

this comment 之后编辑:
您还可以将 ajax 与操作方法一起使用:

人们使用<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
}

关于ajax - 如何调用portlet.java类的特定方法而不是重写serveResource方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13246870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com