无法通过执行以下操作从JS访问Liferay的(Spring Portlet MVC)控制器:



这是我的Javascript函数被调用的JSP: JSP代码

<div class="modal-footer">
                        <button type="button" class="btn btn-primary" id="continueTour" onclick="showTutorial()">Take a Quick Tour</button>
                        <a href="javascript:disableTutorial();" id="skipTour" class="textanchor" style="padding-left:30px;">Skip Tour</a>
                    </div>

这里是我需要呈现另一个JSP的Javascript函数,因此需要访问控制器中的render方法。请注意我调用的模拟超链接点击的"模拟"方法(!不确定这是否正确!):Javascript代码showTutorial()方法:

function showTutorial(){
    launchTutorial();
}
function launchTutorial(){
    var enjoyhint_instance = new EnjoyHint({
        onEnd: function(){
            AUI().use('liferay-portlet-url', function(A) {
                var plid = Liferay.ThemeDisplay.getPlid();
                var url=Liferay.PortletURL.createRenderURL();
                /*url.setPortletId(plid);*/
                url.setPortletName(Liferay.ThemeDisplay.getp)
                url.setParameter('render','redirectToEmpInfo');
                alert(url);
                A.one(document.createElement('a')).attr('href',url).simulate('click');
             });
}
    });
var enjoyhint_script_steps = [
        {
            "next #newAuthorizationActive": 'To create an authorization form'
        }
];
    enjoyhint_instance.set(enjoyhint_script_steps);
    enjoyhint_instance.run();
}

这是我编写的控制器方法,用于捕获来自Javascript的渲染请求。控制器方法(未到达此方法)

@RenderMapping(params = "render=redirectToEmpInfo")
    protected ModelAndView redirectToEmpInfoForAuthTour(ModelMap map, RenderRequest renderRequest, RenderResponse response) {
        LiferayPortal.logInfo(_log, "Inside the render method for Emp Info");
        return null;
        /*return new ModelAndView("emailsuccess", map);*/
    }

将以下代码添加到jsp:

的头部
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%>
<liferay-theme:defineObjects/>
<portlet:defineObjects />

也在你的代码中:

var plid = Liferay.ThemeDisplay.getPlid();
var url=Liferay.PortletURL.createRenderURL();
/*url.setPortletId(plid);*/
url.setPortletName(Liferay.ThemeDisplay.getp)
url.setParameter('render','redirectToEmpInfo');
alert(url);

替换,类似如下:

var plid = Liferay.ThemeDisplay.getPlid();
var url = Liferay.PortletURL.createRenderURL();
url.setPortletId('<%=themeDisplay.getPortletDisplay().getId() %>');
url.setParameter('render', 'redirectToEmpInfo');
alert(url);

最新更新