J'utilise Liferay 6.2-ce-ga4, en essayant d'incorporer des renderURL personnalisés dans une colonne aui-datatable. Le code suivant fonctionne, sauf lorsque je tente d'invoquer la ligne de code suivante à partir d'une fonction de mise en forme de colonne:Rendu de rendu dynamique dans aui-datable
var renderURL = Liferay.PortletURL.createRenderURL();
Il n'y a pas de code d'erreur généré dans la console Eclipse lorsque vous appelez ce code (comme je lance Liferay de au sein d'Eclispe). Tout ce que je peux vous dire, c'est que lorsque je commente la ligne ci-dessus, j'obtiens un DataTable correctement généré, mais après le décommissionnement de la ligne, le DataTable ne s'affiche tout simplement pas.
La pleine page de code est le suivant
<%@ page import="org.json.simple.JSONArray"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%>
<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util"%>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%>
<script src="http://cdn.alloyui.com/2.0.0/aui/aui.js"></script>
<link href="http://cdn.alloyui.com/2.0.0/aui-css/css/bootstrap.min.css" rel="stylesheet"></link>
<portlet:defineObjects />
<%
JSONArray involvedParties = (JSONArray) renderRequest.getAttribute("involvedPartyDetails");
%>
<aui:script>
YUI().use('aui-datatable', 'datatable-sort', 'liferay-portlet-url', function(Y) {
var columns = [ {
label : 'Involved Party Name',
key : 'name',
formatter : function(o) {
// var renderURL = Liferay.PortletURL.createRenderURL();
return '<a href="http://www.cnn.com/">' + o.data.name + '</a>';
},
allowHTML : true,
sortable : true
} ];
var data = <%=involvedParties%>
var dataTable = new Y.DataTable({
columns : columns,
data : data,
scrollable : "y",
height : "500px"
}).render('#myDataTable');
});
</aui:script>
<div id="myDataTable"></div>
Mon Liferay-portlet.xml est donnée comme suit:
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>involved-party-list</portlet-name>
<icon>/icon.png</icon>
<header-portlet-css>/css/main.css</header-portlet-css>
<footer-portlet-javascript>
/js/main.js
</footer-portlet-javascript>
<css-class-wrapper>
involved-party-list-portlet
</css-class-wrapper>
<add-default-resource>true</add-default-resource>
</portlet>
<role-mapper>
<role-name>administrator</role-name>
<role-link>Administrator</role-link>
</role-mapper>
<role-mapper>
<role-name>guest</role-name>
<role-link>Guest</role-link>
</role-mapper>
<role-mapper>
<role-name>power-user</role-name>
<role-link>Power User</role-link>
</role-mapper>
<role-mapper>
<role-name>user</role-name>
<role-link>User</role-link>
</role-mapper>
</liferay-portlet-app>
Toutes les suggestions sur la façon de construire une dynamique renderURL pour chaque ligne la table de données est appréciée.
En note, j'ai essayé de remplacer YUI() par AUI(), mais cela a aussi pour conséquence que la table de données n'est pas générée dans le navigateur. Des commentaires sur les avantages d'utiliser AUI vs YUI seraient également appréciés.
Également discuté ici: https://www.liferay.com/community/forums/-/message_boards/view_message/63339849 –