1

当我使用这个:

<portlet:resourceURL var="ajaxURL" id="ajax" escapeXml="false" />


 $.ajax({
    method : "POST",
        url : "${ajaxURL}",
        data : {
    ...

在我的 ajax 调用中,它不包含在它工作的页面中。

但是当我尝试在页面上包含相同的 javscript 代码时出现错误:

WARN  [http-bio-8080-exec-27][404_jsp:109] /$%7BajaxURL%7D

我的问题是如何将该资源 url 传递给包含的 javascript 或如何在 javascript 中生成它。

我试过了: var urlVar = '<portlet:resourceURL var="ajaxURL" id="ajax" escapeXml="false" />'

当我以这种方式使用 urlVar 时:

$.ajax({
method : "POST",
    url : urlVar,
    data : {
...

它不起作用。有谁知道如何解决这个问题?谢谢

4

3 回答 3

1

您可以使用 java 脚本生成 resourceURL

var resourceURL = Liferay.PortletURL.createResourceURL();
resourceURL.setPortletId(86);
resourceURL .setParameter("key2", "value");
resourceURL.toString();
于 2013-08-23T13:40:14.380 回答
0

我可以为你想两个选择。

要在 JavaScript 文件中使用 JSP 标记和 EL,您需要从 JSP 提供它。我之前在portlet 中使用该serveResource方法提供JavaScript 文件来完成此操作。这样,您可以在 JavaScript JSP 中使用相同的 portlet 标记。

在您的 portlet JSP 中

<portlet:resourceURL var='portletJS' id='javascriptResourceID' />
<script type='text/javascript' src='${portletJS'></script>

在您的 portlet 的serveResource方法中。

if (request.getResourceID == "javascriptResourceID) {
    //render JSP for JavaScript
}

另一个选项是在您的 portlet 中设置一个 JavaScript 变量,然后在您的静态 JavaScript 文件中使用该变量。

在您的 portlet JSP 中

<script type='text/javascript'>
    var portletAjaxURL = '<portlet:resourceURL id="ajax" escapeXml="false" />';
</script>

在您的静态 JavaScript 文件中

$.ajax({
    method : "POST",
    url : portletAjaxURL,
    data : {
    ...
于 2013-08-14T13:17:22.703 回答
0

我找到了解决方案。这样做的一种方法是在 jsp 页面上定义资源 url,例如:

<portlet:resourceURL var="yourResourceURL" id="yourResource" />

并将其从参数中的 jsp 传递给位于外部 js 文件中的函数。

例如在 js 中:

function test(urlVar) {
    alert(urlVar);
        $.ajax({
            method : "POST",
            url : urlVar,
            success : function(data) {

            }
        });
}

并在 jsp 中像这样调用该函数:

 test(" ${yourResourceURL} ");

它应该可以工作。

于 2013-08-23T06:20:01.753 回答