Liferay 中的不同 jsp 渲染
Different jsp rendering in Liferay
我需要进行以下构造:
String pageName = request.getParameter("pageName");
if ("some_parameter".equals("pageName")) {
include("html/one.jsp", request, response);
}
if ("third_parameter".equals("pageName")) {
include("html/two.jsp", request, response);
}
但是我总是遇到NullPointerException这样的问题
我的意思是我尝试让不同的 renderURL 显示不同的 jsps,但我不知道怎么做。如果你不明白我在说什么,但对这个主题有了解,请在评论中写下 smth,我会提供更多信息。提前致谢!
好的,我举个例子:
public static final String VIEW = "view"; //view.jsp parameter
public static final String ADD_BOOK = "add_book"; //add_book.jsp parameter
private final String VIEW_PAGE_PATH = "/html/view.jsp"; //view.jsp path parameter
private final String ADD_BOOK_PAGE_PATH = "/html/add_book.jsp"; //add_book.jsp path parameter
@Override
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
String pageName = request.getParameter("pageName");
if (pageName.equalsIgnoreCase(ADD_BOOK)) {
include(ADD_BOOK_PAGE_PATH, request, response);
} else {
include(VIEW_PAGE_PATH, request, response);
}
}
和我的 view.jsp:
<portlet:renderURL var="addBookVar">
<portlet:param name="pageName" value="<%=Library.ADD_BOOK %>"/>
</portlet:renderURL>
<a href="${addBookVar}">Add Book</a>
为什么这段代码不起作用?我应该怎么做才能达到这种情况
不同的 renderURLs 显示不同的 jsps?
用字符串值替换你的变量,应该可以工作
注意:将变量放在引号之间使其成为字符串而不是变量
您的代码应如下所示:
String pageName = request.getParameter("pageName");
if (pageName.equals("some_parameter")) {
include("html/one.jsp", request, response);
}
if (pageName.equals("third_parameter")) {
include("html/two.jsp", request, response);
}
您获得 NullPointerException 的原因可能不止一个。是因为你检查的参数在请求中不存在,值null.So最好调试一下,在这里找出确切的问题。
请先检查 "not null" 的 pageName,然后再进行比较。
在进行比较之前,使用 StringUtils.isNotEmpty(..) class ref 检查 "if string is not null and not empty"。
Source Post
尝试 getPortletContext().getRequestDispatcher(ADD_BOOK_PAGE_PATH).include(request,response)
而不是 include(ADD_BOOK_PAGE_PATH, request, response)
我需要进行以下构造:
String pageName = request.getParameter("pageName");
if ("some_parameter".equals("pageName")) {
include("html/one.jsp", request, response);
}
if ("third_parameter".equals("pageName")) {
include("html/two.jsp", request, response);
}
但是我总是遇到NullPointerException这样的问题
我的意思是我尝试让不同的 renderURL 显示不同的 jsps,但我不知道怎么做。如果你不明白我在说什么,但对这个主题有了解,请在评论中写下 smth,我会提供更多信息。提前致谢!
好的,我举个例子:
public static final String VIEW = "view"; //view.jsp parameter
public static final String ADD_BOOK = "add_book"; //add_book.jsp parameter
private final String VIEW_PAGE_PATH = "/html/view.jsp"; //view.jsp path parameter
private final String ADD_BOOK_PAGE_PATH = "/html/add_book.jsp"; //add_book.jsp path parameter
@Override
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
String pageName = request.getParameter("pageName");
if (pageName.equalsIgnoreCase(ADD_BOOK)) {
include(ADD_BOOK_PAGE_PATH, request, response);
} else {
include(VIEW_PAGE_PATH, request, response);
}
}
和我的 view.jsp:
<portlet:renderURL var="addBookVar">
<portlet:param name="pageName" value="<%=Library.ADD_BOOK %>"/>
</portlet:renderURL>
<a href="${addBookVar}">Add Book</a>
为什么这段代码不起作用?我应该怎么做才能达到这种情况 不同的 renderURLs 显示不同的 jsps?
用字符串值替换你的变量,应该可以工作 注意:将变量放在引号之间使其成为字符串而不是变量
您的代码应如下所示:
String pageName = request.getParameter("pageName");
if (pageName.equals("some_parameter")) {
include("html/one.jsp", request, response);
}
if (pageName.equals("third_parameter")) {
include("html/two.jsp", request, response);
}
您获得 NullPointerException 的原因可能不止一个。是因为你检查的参数在请求中不存在,值null.So最好调试一下,在这里找出确切的问题。
请先检查 "not null" 的 pageName,然后再进行比较。 在进行比较之前,使用 StringUtils.isNotEmpty(..) class ref 检查 "if string is not null and not empty"。 Source Post
尝试 getPortletContext().getRequestDispatcher(ADD_BOOK_PAGE_PATH).include(request,response)
而不是 include(ADD_BOOK_PAGE_PATH, request, response)