Liferay Portlet:如何使用Parameter调用serveResource方法进行ajax调用

时间:2016-03-16 17:48:23

标签: java jquery tomcat liferay portlet

我在现有代码中实现新功能存在特定问题。我无法弄清楚它是如何工作的。 它是来自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之外的其他参数都以某种方式定义。 我错过了什么吗?

2 个答案:

答案 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