标签:portlet java jsp el liferay el
我正在尝试使用< portlet:actionURL>传递参数到liferay中的一个portlet,但事实证明,使用EL传递值不工作,但是,使用JSP表达式标记工作正常.
这是我的相关代码:
<%
ResultRow row = (ResultRow)request.getAttribute(WebKeys.SEARCH_CONTAINER_RESULT_ROW);
Course course = (Course) row.getObject();
long groupId = themeDisplay.getLayout().getGroupId();
String name = Course.class.getName();
String primaryKey = String.valueOf(course.getPrimaryKey());
%>
<liferay-ui:icon-menu>
<c:if test="<%= permissionChecker.hasPermission(groupId, name, primaryKey, ActionKeys.UPDATE)%>">
<portlet:actionURL name="editCourse" var="editURL">
<portlet:param name="resourcePrimaryKey" value="${primaryKey}"/>
</portlet:actionURL>
<liferay-ui:icon image="edit" message="Edit" url="${editURL}" />
</c:if>
</liferay-ui:icon-menu>
如您所见,在< portlet:param>中标签,我用EL传递值属性.但它不起作用,我在动作方法中收到“resourcePrimaryKey”的值为0,当我这样做时:
long courseId = ParamUtil.getLong(request, "resourcePrimaryKey");
// courseId is 0 here
但是,如果我使用JSP表达式标签代替EL,它可以正常工作:
<portlet:actionURL name="editCourse" var="editURL">
<portlet:param name="resourcePrimaryKey" value="<%= primaryKey %>"/>
</portlet:actionURL>
现在,我获得了“resourcePrimaryKey”所需的值.
任何人都可以知道这里发生了什么?令人惊讶的是,EL在其他地方工作正常,如你所见 – url属性的${editURL}值,工作正常,并重定向到相应的URL.
我在apache邮件存档上遇到了关于同一问题的this thread,但这并没有真正解决问题.
解决方法:
scriptlet中的变量不能直接在EL中使用,您首先需要将其设置为:
<c:set var="primKey"><%=primaryKey %></c:set>
并使用${primKey}或将其设置为请求属性:
request.setAttribute("primKey", primaryKey);
显然,更好的是直接使用表达式.
另外关于${editURL}工作,它是一个portlet jsp标记,它在页面上下文中设置变量,以便它可供EL使用.
我们的el wiki是一个了解这些东西的好地方,请注意标题为EL提供这个问题的对象:-)
标签:portlet,java,jsp,el,liferay,el 来源: https://codeday.me/bug/20190831/1777439.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。