Liferay:动作阶段后错误的 .jsp,而不是正确的值
Liferay: wrong .jsp after action phase and not the right values
如何在 Liferay 中正确使用动作和渲染阶段,我遇到了很大的麻烦。
我正在使用 for 循环显示对象列表中的不同 link。
现在我想单击其中一个 link 并转到下一个 .jsp。新的.jsp 的内容取决于连接到object/link.
的id
我该怎么做?
到目前为止,我的代码如下所示:
ePfad.jsp
<% EpfadUtil all = new EpfadUtil();
List pfade = all.getEpfad();
for(int i = 0; i < pfade.size(); i++){
Epfad pfad = (Epfad) pfade.get(i);
//actionResponse.setRenderParameter("id", String.valueOf(pfad.getEpfadId()));
%>
<a href = "<portlet:actionURL name="showById"><portlet:param name="mvcPath" value="/html/wbm/user/ePfadAnmelden.jsp?id=<%=pfad.getEPfadId() %>" /> </portlet:actionURL>"> <%=pfad.getTitle().getName()%> </a>
<% } %>
WBM_Portlet.java
public class WBM_Portlet extends MVCPortlet {
public void showById(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
PortletPreferences prefs = actionRequest.getPreferences();
String id = actionRequest.getParameter("id");
if(id != null) {
prefs.setValue("id", id);
prefs.store();
}
}
//[...]
}
我的代码不会重定向到右边jsp而且id也不正确
谢谢你,并致以最诚挚的问候。
解决方案:
ePfad.jsp
<portlet:renderURL var="showByIdRenderURL">
<portlet:param name="mvcPath" value="/html/wbm/user/ePfadAnmelden.jsp" />
<portlet:param name="id" value="<%=String.valueOf(pfad.getEPfadId()) %>" />
</portlet:renderURL>
<a href="<%=showByIdRenderURL%>"><%=pfad.getTitle().getName() %></a>
WBM_Portlet.java
public void showById(RenderRequest request,
RenderResponse response) throws IOException, PortletException
{
PortletPreferences prefs = request.getPreferences();
String id = request.getParameter("id");
if(id != null)
{
prefs.setValue("id", id);
prefs.store();
}
}
如果您只想显示另一个 JSP,那么您应该使用渲染阶段而不是动作阶段。所以这里是你如何使用 renderURL:
<portlet:renderURL var="showByIdRenderURL">
<portlet:param name="mvcPath" value="/html/wbm/user/ePfadAnmelden.jsp %>" />
<portlet:param name="id" value="<%= String.valueOf(pfad.getEPfadId()) %>" />
</portlet:renderURL>
<a href="<%= showByIdRenderURL %>"><%=pfad.getTitle().getName()%></a>
并且在 render
方法或 doView
方法中,您可以编写逻辑来存储参数 id
中的首选项(请注意上面的 id
URL设置为参数,你的做法不对)
如果你仍然想使用动作阶段(不推荐用于此类事情,它更适合表单帖子)那么你可以执行以下操作:
<portlet:actionURL name="showById" var="showByIdActionURL">
<portlet:param name="mvcPath" value="/html/wbm/user/ePfadAnmelden.jsp %>" />
<portlet:param name="id" value="<%= String.valueOf(pfad.getEPfadId()) %>" />
</portlet:actionURL>
<a href="<%= showByIdActionURL %>"><%=pfad.getTitle().getName()%></a>
在您的操作方法中:
public void showById(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
PortletPreferences prefs = actionRequest.getPreferences();
String id = actionRequest.getParameter("id");
if(id != null) {
prefs.setValue("id", id);
prefs.store();
}
String mvcPath = actionRequest.getParameter("mvcPath");
// this would tell the render method to show the required JSP
actionResponse.setRenderParameter("mvcPath", mvcPath);
}
希望这能回答问题。
但是如果你真的想开发一些实质性的东西并学习,我强烈建议你阅读一些很好的教程,这些教程解释了 portlet 生命周期不同阶段的概念,或者一些好书,比如 Portlets in Action
或Liferay in Action
,即使通过 stackwiki 链接 - liferay and portlet 也会给你一个更好的主意。
如何在 Liferay 中正确使用动作和渲染阶段,我遇到了很大的麻烦。
我正在使用 for 循环显示对象列表中的不同 link。 现在我想单击其中一个 link 并转到下一个 .jsp。新的.jsp 的内容取决于连接到object/link.
的id我该怎么做?
到目前为止,我的代码如下所示:
ePfad.jsp
<% EpfadUtil all = new EpfadUtil();
List pfade = all.getEpfad();
for(int i = 0; i < pfade.size(); i++){
Epfad pfad = (Epfad) pfade.get(i);
//actionResponse.setRenderParameter("id", String.valueOf(pfad.getEpfadId()));
%>
<a href = "<portlet:actionURL name="showById"><portlet:param name="mvcPath" value="/html/wbm/user/ePfadAnmelden.jsp?id=<%=pfad.getEPfadId() %>" /> </portlet:actionURL>"> <%=pfad.getTitle().getName()%> </a>
<% } %>
WBM_Portlet.java
public class WBM_Portlet extends MVCPortlet {
public void showById(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
PortletPreferences prefs = actionRequest.getPreferences();
String id = actionRequest.getParameter("id");
if(id != null) {
prefs.setValue("id", id);
prefs.store();
}
}
//[...]
}
我的代码不会重定向到右边jsp而且id也不正确
谢谢你,并致以最诚挚的问候。
解决方案:
ePfad.jsp
<portlet:renderURL var="showByIdRenderURL">
<portlet:param name="mvcPath" value="/html/wbm/user/ePfadAnmelden.jsp" />
<portlet:param name="id" value="<%=String.valueOf(pfad.getEPfadId()) %>" />
</portlet:renderURL>
<a href="<%=showByIdRenderURL%>"><%=pfad.getTitle().getName() %></a>
WBM_Portlet.java
public void showById(RenderRequest request,
RenderResponse response) throws IOException, PortletException
{
PortletPreferences prefs = request.getPreferences();
String id = request.getParameter("id");
if(id != null)
{
prefs.setValue("id", id);
prefs.store();
}
}
如果您只想显示另一个 JSP,那么您应该使用渲染阶段而不是动作阶段。所以这里是你如何使用 renderURL:
<portlet:renderURL var="showByIdRenderURL">
<portlet:param name="mvcPath" value="/html/wbm/user/ePfadAnmelden.jsp %>" />
<portlet:param name="id" value="<%= String.valueOf(pfad.getEPfadId()) %>" />
</portlet:renderURL>
<a href="<%= showByIdRenderURL %>"><%=pfad.getTitle().getName()%></a>
并且在 render
方法或 doView
方法中,您可以编写逻辑来存储参数 id
中的首选项(请注意上面的 id
URL设置为参数,你的做法不对)
如果你仍然想使用动作阶段(不推荐用于此类事情,它更适合表单帖子)那么你可以执行以下操作:
<portlet:actionURL name="showById" var="showByIdActionURL">
<portlet:param name="mvcPath" value="/html/wbm/user/ePfadAnmelden.jsp %>" />
<portlet:param name="id" value="<%= String.valueOf(pfad.getEPfadId()) %>" />
</portlet:actionURL>
<a href="<%= showByIdActionURL %>"><%=pfad.getTitle().getName()%></a>
在您的操作方法中:
public void showById(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
PortletPreferences prefs = actionRequest.getPreferences();
String id = actionRequest.getParameter("id");
if(id != null) {
prefs.setValue("id", id);
prefs.store();
}
String mvcPath = actionRequest.getParameter("mvcPath");
// this would tell the render method to show the required JSP
actionResponse.setRenderParameter("mvcPath", mvcPath);
}
希望这能回答问题。
但是如果你真的想开发一些实质性的东西并学习,我强烈建议你阅读一些很好的教程,这些教程解释了 portlet 生命周期不同阶段的概念,或者一些好书,比如 Portlets in Action
或Liferay in Action
,即使通过 stackwiki 链接 - liferay and portlet 也会给你一个更好的主意。