我在现有代码中实现新功能存在特定问题。我无法弄清楚它是如何工作的。 它是来自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);
}
}
....
}
这个只是来自Java Class的代码片段,它正在扩展MVCPortlet。在那里,我尝试读取所有参数,这些参数与请求对象一起发送,但打印输出与我的预期略有不同:
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之外的其他参数都以某种方式定义。 我错过了什么吗?
答案 0 :(得分:3)
Liferay允许您在AJAX调用中传递参数
尝试制作两个资源网址
<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传递给相应的两个按钮,并在操作类中读取cmd,您可以知道单击了哪个按钮并根据cmd值执行操作
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
答案 1 :(得分:0)
你应该寻找
<script type="text/javascript">
require(["dojo/parser", "simpleSearch", "dojo/domReady!"],
function(parser){
parser.parse();
});
</script>
运行dojo解析器,运行ajax调用..并将ajax请求添加到您的数据中,同时更改ajaxURL和Action for search