Use*_*343 4 ajax jquery portlet liferay liferay-6
我想在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>
Run Code Online (Sandbox Code Playgroud)
在我的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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,现在它只是@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)
Run Code Online (Sandbox Code Playgroud)
我的流程动作方法如下
@ProcessAction(name = "ajax_AddAdvertise")
public void ajax_AddAdvertise(ResourceRequest request,ResourceResponse response) {
}
Run Code Online (Sandbox Code Playgroud)
Pra*_*h K 10
如何在ajax调用上调用portlet.java类的特定方法?
我认为我们不能有两个不同版本的serveResource方法,就像我们为动作方法所做的那样,至少不是默认实现.
如果你想要不同的方法,你必须采用Spring MVC(@ResourceMapping)方式来实现它.
您仍然可以serveResource使用resourceId以下方法在方法中定义不同的逻辑(完整示例):
在JSP中:
<portlet:resourceURL var="myResourceURL" id="myResourceID01" />
Run Code Online (Sandbox Code Playgroud)
在portlet类中,该serveResource方法将包含以下代码:
String resourceID = request.getResourceID();
if(resoureID.equals("myResourceID01")) {
// do myResourceID01 specific logic
} else {
// else do whatever you want
}
Run Code Online (Sandbox Code Playgroud)
请记住[重要]
在你不应该使用一个portlet <html>,<head>,<body>因为门户标签生成页面的片段,而不是整个页面.即使允许,您的结果页面也不会格式正确,并且在不同的浏览器上表现不同.而且修改DOM元素的javascript将完全没用.
在此评论后编辑:
您还可以将ajax与操作方法一起使用:
人们<portlet:actionURL>通常使用ajax <form>- POST.
为此,actionURL在你的jsp中生成的方式略有不同,如下所示:
<portlet:actionURL name="ajax_AddAdvertise" var="addToDo" windowState="<%= LiferayWindowState.EXCLUSIVE.toString()%>">
</portlet:actionURL>
Run Code Online (Sandbox Code Playgroud)
在你的portlet中你可以(如问题所示):
@ProcessAction(name = "ajax_AddAdvertise")
public void ajax_AddAdvertise(ActionRequest request, ActionResponse response) {
// ... your code
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6973 次 |
| 最近记录: |