Liferay成绩簿应用报错:找不到entry_search_columns.jspf及变量无法解析
问题解决方案
1. 解决文件找不到异常(PWC6117: File "/assignment/entry_search_columns.jspf" not found)
- 确认文件位置:确保
entry_search_columns.jspf文件放在Liferay Portlet的标准资源目录下,即src/main/resources/META-INF/resources/assignment/。Liferay仅会识别该路径下的前端资源文件。 - 检查引用路径:在
view.jsp中引用该文件时,确保路径与实际文件位置完全匹配。正确的引用代码应为:
路径开头的<%@ include file="/assignment/entry_search_columns.jspf" %>/表示从Portlet的根资源目录(META-INF/resources/)开始查找。
2. 解决entry、row无法解析的错误
这两个变量必须在Liferay搜索容器的循环上下文内才能被识别,需确保entry_search_columns.jspf被正确包含在搜索容器的行定义范围内:
步骤1:在view.jsp中构建正确的搜索容器结构
<liferay-ui:search-container> <!-- 定义搜索结果集 --> <liferay-ui:search-container-results results="${assignments}" total="${assignmentsCount}" /> <!-- 定义搜索行,通过modelVar暴露entry变量 --> <liferay-ui:search-container-row className="com.your.package.Assignment" <!-- 替换为你的Assignment实体类全路径 --> keyProperty="assignmentId" modelVar="entry" <!-- 此处定义的变量即为jspf中使用的entry --> > <!-- 包含列定义的jspf文件 --> <%@ include file="/assignment/entry_search_columns.jspf" %> </liferay-ui:search-container-row> <!-- 分页组件 --> <liferay-ui:search-container-paginator /> </liferay-ui:search-container>
步骤2:在entry_search_columns.jspf中添加必要的依赖声明
在jspf文件开头添加以下内容,确保标签库和实体类被正确引入:
<%@ page import="com.your.package.Assignment" %> <!-- 替换为你的实体类路径 --> <%@ page import="com.liferay.portal.kernel.util.LanguageUtil" %> <%@ page import="com.liferay.portal.kernel.util.HtmlUtil" %> <%@ taglib prefix="portlet" uri="http://java.sun.com/portlet_2_0" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="liferay-ui" uri="http://liferay.com/tld/ui" %> <%@ taglib prefix="liferay-frontend" uri="http://liferay.com/tld/frontend" %> <%@ taglib prefix="aui" uri="http://liferay.com/tld/aui" %>
关键说明
modelVar="entry":由<liferay-ui:search-container-row>标签定义,会将当前循环的Assignment实体对象赋值给entry变量,供jspf直接调用。row变量:是<liferay-ui:search-container-row>标签自动暴露的内置变量,代表当前搜索容器行对象,无需额外定义即可使用。
完成上述调整后,重新构建并部署Portlet即可解决问题。
内容的提问来源于stack exchange,提问作者Md Tahmid Ashraf Chowdhury
相关产品推荐
相关产品推荐

