URL をレンダリングして、2 つのポートレット間で通信しようとしています。
1 つのポートレットには、使用可能なオプションのリストを含むテーブルが表示されます。オプションの 1 つがクリックされると、JavaScript 関数が URL をレンダリングし、2 番目のポートレットに、クリックされたプロジェクトに関する詳細情報が表示されます。
ただし、機能していません。URL の行の適切な ID を使用して URL は正しくレンダリングされますが、設定された 2 番目のポートレットのメソッドは@RenderMapping(params)
呼び出されません。
最初のポートレット view.jsp:
<%@page import="java.util.List"%>
<%@page import="pl.spot.vorange.model.Project"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<div id="projectListDiv" style="width: 100%;"></div>
<script type="text/javascript">
var pids = new Array();
var pnames = new Array();
var projectId = "${p.id}";
<%
List<Project> all = (List<Project>) request.getAttribute("all");
if(all!=null && !all.isEmpty()) {
int i = 0;
for(Project project : all) {
out.println("pids[" + i + "]='"+project.getId()+"';\n");
out.println("pnames[" + i + "]='"+project.getName()+"';\n");
i++;
}
} else {
out.println("brak projektów w zasięgu requestu");
}
%>
function createProjectList() {
var tags = "<table width='100%'>";
for(var i=0; i<pids.length; i++) {
tags += "<tr class='projectTr'>";
tags += "<td class='orangeArray' onClick='firePortletEvent2(" + pids[i] +
")'> </td>";
if(pids[i]!=projectId) {
tags += "<td class='orangeTableItem' onClick='firePortletEvent2(" +
pids[i] + ")'>";
} else {
tags += "<td class='orangeTableItemSel'
onClick='firePortletEvent2(" + pids[i] + ")'>";
}
tags += pnames[i] + "</td></tr>";
}
tags += "</table>";
el = document.getElementById("projectListDiv");
if(el!=null) {
el.innerHTML = tags;
}
}
function firePortletEvent2(projectId) {
var url ="<portlet:renderURL />";
prefix = "&_offer2_WAR_vorange_";
url += prefix+"a=getproject";
url += prefix+"page=expiring";
url += prefix+"tab=expiringOffers";
url += prefix+"pid="+encodeURI(projectId);
location = url;
}
createProjectList();
</script>
プロジェクトの 1 つをクリックすると、URL が表示されます。
2 番目のポートレット コントローラ:
@RenderMapping(params = "a=getproject")
public String getProject(RenderResponse response, RenderRequest request) {
String pid = request.getParameter("pid");
Project p = null;
if (pid != null) {
long id = Long.parseLong(pid);
p = projectService.searchById(id);
request.getPortletSession().setAttribute("project", p);
}
p = (Project) request.getPortletSession().getAttribute("project");
request.setAttribute("p", p);
return "view";
}
このメソッドは呼び出されないため、正しく機能しているかどうかはわかりません。
コードが乱雑であることはわかっていますが、書いていません。入手したばかりで、修正する必要があります。
このコードが機能しなくても驚かないでしょうが、私は Liferay で開発を始めたばかりで、多くのことを知りません。