页面未通过createRenderUrl转发

page not getting forwarded through createRenderUrl

本文关键字:createRenderUrl 转发      更新时间:2023-09-26

我是救生新手。。我想做的是在单击链接时将值传递给javascript函数,并用传递给该函数的值从该函数调用另一个jsp页面。。

这是我试过的。

<script type="text/javascript">
function sendId(userid) {
    AUI().ready("liferay-portlet-url", function(A) {
       var portletURL = Liferay.PortletURL.createRenderURL();
       alert("in function"+userid);
       portletURL.setParameter("jspPage", "/html/assignsites/assignSites.jsp" );
       portletURL.setParameter("id", userid);
       portletURL.setPortletId("assignsites_WAR_AssignSitesportlet");
    });    }
</script>
for (User usersList: users) {   
%>
    <tr>
        <td><a href="#" onclick="sendId('<%=usersList.getUserId()%>');"><%=usersList.getFullName()%></a></td>
        <td><%=usersList.getEmailAddress()%></td>
    </tr>
<%
}
%>

我想在assignSites.jsp上检索userId,所以我在portletURL中设置该值。但当我点击链接时,警报就会出现,什么也没发生。。我做得对吗。。?

请有人指导我。

您提供的代码有两个问题:

  • AUI名称空间应该是顶级的,而不是函数实现的一部分
  • 尽管如此,您并没有对构造的portletURL变量执行任何操作

Pankaj Kathiriya的评论已经提供了一种在不涉及任何javascript的情况下生成URL的方法,这里有一个漂亮的打印版本(略有更改):(警告:伪代码,在这里编写,从未测试过)

for (User usersList: users) {   
%>
    <portlet:renderURL var="assignSiteURL">
       <portlet:param name="id" value="<%=usersList.getUserId()%>"/>
       <portlet:param name="jspPage" value="/html/assignsites/assignSites.jsp"/>
    </portletRenderURL>
    <tr>
        <td><a href="<%=assignSiteURL%>"><%=usersList.getFullName()%></a></td>
        <td><%=usersList.getEmailAddress()%></td>
    </tr>
<%
}
%>

请记住,AUI名称空间旨在将您的JS代码与其他portlet的代码隔离开来:您提出的代码最终会有一个名为sendId(x)的全局函数——同一页面上的任何其他portlet都可能只引入另一个同名方法。这将导致一场很难解决的冲突,因此你不应该这样做。

当然,这种隔离的缺点是,不能像在"onclick"处理程序中那样简单地调用这样的方法。但是,您可以枚举要更改的所有节点并动态更新它们。

如果您坚持使用javascript解决方案,我将把它留给您(或其他人),部分原因是我认为在这种情况下没有必要。