liferay のポートレットにパラメーターを渡そうとし<portlet:actionURL>
ていますが、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 を使用しました。しかし、それは機能せず、次のようにすると、アクション メソッドのように値を受け取ります。0
"resourcePrimaryKey"
long courseId = ParamUtil.getLong(request, "resourcePrimaryKey");
// courseId is 0 here
ただし、EL の代わりに JSP 式タグを使用すると、問題なく動作します。
<portlet:actionURL name="editCourse" var="editURL">
<portlet:param name="resourcePrimaryKey" value="<%= primaryKey %>"/>
</portlet:actionURL>
これで、 に必要な値を取得できました"resourcePrimaryKey"
。
ここで何が起こっているのか誰でも理解できますか?驚くべきことに、ご覧のとおり、他の場所の EL は正常に動作します - url${editURL}
属性の値は正常に動作し、対応する URL にリダイレクトします。
同じ問題に関してApacheメールアーカイブでこのスレッドに出くわしましたが、実際には問題は解決しません。