gpt4 book ai didi

java - Liferay 门户组件 : how to make ajax call to serveResource Method with Parameter

转载 作者:行者123 更新时间:2023-11-28 22:07:46 26 4
gpt4 key购买 nike

我有一个特定的问题要在现有代码中实现新功能。我不知道这是怎么回事。它是来自 liferay portlet 的代码,用于执行搜索查询。我有一个 jsp 文件、一个 ajax 调用和一个扩展 MVCPortlet 的 java 类。查询是一个带有输入字段和提交按钮的表单。我想实现一个具有不同搜索行为的新按钮,因此 java 类必须知道按下了什么按钮。但是据我所知,没有办法简单地实现这一点,因为我在网上找到的代码示例与我的示例不同。也许我只是瞎了眼。

所以这是我提到的代码:

<div class="${baseCl}" tabindex="-1">
<form data-dojo-attach-point="searchform" method="post">
<input class="${baseCl}-input" name="search" data-dojo-attach-point="search" type="text" autocomplete="off" value="${searchInputValue}"/>
<span class="${baseCl}-searchbutton"><input type="submit" data-dojo-attach-point="searchbutton" name="simpleSearchButton" value="${searchSubmitText}"/></span>
<span class="${baseCl}-searchbutton"><input type="submit" data-dojo-attach-point="searchbutton" name="titleSearchButton" value="${searchTitleSubmitText}"/></span>
</form>
<div class="${baseCl}-searchresults no-display" data-dojo-attach-point="searchresults" tabindex="-1"></div>
</div>

这是表格。你可以看到我添加了一个名为 titleSearchButton

的新按钮
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<%@ taglib prefix="liferay-portlet" uri="http://liferay.com/tld/portlet" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.portlet.PortletSession" %>

<portlet:defineObjects />

<liferay-portlet:actionURL var="searchAction" name="search" />
<portlet:resourceURL var="searchAJAXURL" />


<div data-dojo-type="simpleSearch" data-dojo-props="searchAction:'<%=searchAction %>',
searchURL:'<%=searchAJAXURL %>',
searchSubmitText:'<liferay-ui:message key="simple.search.submit.button" />',
searchTitleSubmitText:'<liferay-ui:message key="simple.search.submit.button.title" />',
searchStandartInputValue:'<liferay-ui:message key="simple.search.input.value" />',
searchInputValue:'<liferay-ui:message key="simple.search.input.value" />'
">
</div>

这是 .jsp 文件

public void serveResource(ResourceRequest request, ResourceResponse response)
throws PortletException, IOException {


Enumeration<String> parameterNames = request.getParameterNames();

while (parameterNames.hasMoreElements()) {

String paramName = parameterNames.nextElement();
log.info("name = " + paramName);

String[] paramValues = request.getParameterValues(paramName);
for (int i = 0; i < paramValues.length; i++) {
String paramValue = paramValues[i];
log.info("value = " + paramValue);
}
}

....

}

这只是扩展 MVCPortlet 的 Java 类代码中的一个片段。在那里我尝试读取所有参数,这些参数与请求对象一起发送,但打印输出与我的预期略有不同:

name = count
value = 5
name = start
value = 0
name = searchString
value = test
name = facets
value = {}
name = method
value = simplesearch

所以有很多参数我不知道类从哪里得到这些。输入表单中的 searchString 在那里,但还需要按下的按钮信息。知道如何获取它或查找将这些参数传递给此方法的位置吗?

网络上其他示例的问题是:按钮有 onclick javascript 函数。代码中没有 jQuery ajax 或 aui-io-request 实现(在该项目的所有 portlet 中),其中以某种方式定义了除 searchString 之外的其他参数。我错过了什么吗?

最佳答案

Liferay 允许您在 AJAX 调用中传递参数

尝试制作两个资源 URL

<liferay-portlet:resourceURL var="buttonClickURLA">
<portlet:param name="<%=Constants.CMD %>" value="buttonA"/>
</liferay-portlet:resourceURL>

<liferay-portlet:resourceURL var="buttonClickURLB">
<portlet:param name="<%=Constants.CMD %>" value="buttonB"/>
</liferay-portlet:resourceURL>

将这两个URL传递给对应的两个按钮,在action类中读取cmd,就可以知道点击了哪个按钮,并根据cmd值执行 Action

public void serveResource(ResourceRequest resourceRequest,
ResourceResponse resourceResponse) throws IOException,
PortletException {

String cmd = ParamUtil.getString(resourceRequest,"cmd");
if(cmd.equals("buttonA")) {
// perform your action
}
if(cmd.equals("buttonB")) {
// perform action B
}
}
I hope this solve your problem please let me know If you require help

关于java - Liferay 门户组件 : how to make ajax call to serveResource Method with Parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36043208/

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