基于 Arraylist 动态显示 liferay-search-container 列?
Dynamically Display liferay-search-container columns based on Arraylist?
我正在尝试动态显示 liferay 网格的列。出于同样的原因,参考以下 link、 的一些建议,我为用户提供了一个选项,可以在配置页面中选择 table 的所需列。配置页面的选定列正在保存在数组列表中。
问题:现在我需要根据数组列表值显示列。而是对列属性进行硬编码,我需要迭代列表并在 table/grid.
中显示选定的列
假设我正在使用 liferay 默认 USER_ 模型。配置页面的所有选定列都保存在一个列表中,如下所示,
ArrayList<String> al = new ArrayList<String>();
Iterator<String> itr = al.iterator();
while(itr.hasNext())
{
String columnName = itr.next();
columnName = columnName.trim().toLowerCase();
String columnVal = portletPreferences.getValue(columnName, StringPool.BLANK);
al.add(columnName);
}
现在假设用户在配置页面{名字、姓氏、屏幕名称}中选择了以下列。因此该列表将仅包含这三个值。
基于这个选定的列,我需要在搜索容器中动态创建列 [<liferay-ui:search-container-column-text>
]。
<liferay-ui:search-container delta="5" emptyResultsMessage="no-users-were-found">
<liferay-ui:search-container-results
results="<%= ListUtil.subList(users, searchContainer.getStart(),searchContainer.getEnd()) %>"
total="<%= totalNoOfUsers %>">
</liferay-ui:search-container-results>
<liferay-ui:search-container-row className="com.liferay.portal.model.User" keyProperty="userId" modelVar="user">
</liferay-ui:search-container-row>
<liferay-ui:search-iterator />
</liferay-ui:search-container>
如何创建硬编码列,如下所示,
<liferay-ui:search-container-column-text name="Last Name" value="<%= user.getLastName() %>">
</liferay-ui:search-container-column-text>
需要一些建议,在此先感谢
可以使用<c:foreach>
或者scriptletfor
遍历列名ArrayList
,如下:
这里 entryColumns
是您保存的 ArrayList
列。
<%
for(String columnName : entryColumns) {
%>
<c:choose>
<c:when test='<%= "firstName".equals(columnName) %>'>
<liferay-ui:search-container-column-text name="First Name"> value="<%= user.getFirstName() %>" />
</c:when>
<c:when test='<%= "lastName".equals(columnName) %>'>
<liferay-ui:search-container-column-text name="Last Name"> value="<%= user.getFirstName() %>" />
</c:when>
<c:when test='<%= "birthDate".equals(columnName) %>'>
<liferay-ui:search-container-column-text name="Birth Date">
<fmt:formatDate value="<%= user.getBirthDate() %>" pattern="dd MMM yyyy" />
</liferay-ui:search-container-column-text>
</c:when>
</c:choose>
<%
}
%>
如果您不喜欢 scriptlet,则可以使用类似的东西:
<c:foreach items="${entryColumns}" var="columnName">
<c:choose>
<c:when test='${"firstName" eq columnName}'>
<liferay-ui:search-container-column-text name="First Name"> value="<%= user.getFirstName() %>" />
</c:when>
</c:choose>
</c:foreach>
您需要检查容器文本和值的 columnName
,因为它们是不同的,在某些情况下您可能想要编写一些额外的 HTML 而不是仅仅使用value
属性,这样它也可以处理。
我正在尝试动态显示 liferay 网格的列。出于同样的原因,参考以下 link、
问题:现在我需要根据数组列表值显示列。而是对列属性进行硬编码,我需要迭代列表并在 table/grid.
中显示选定的列假设我正在使用 liferay 默认 USER_ 模型。配置页面的所有选定列都保存在一个列表中,如下所示,
ArrayList<String> al = new ArrayList<String>();
Iterator<String> itr = al.iterator();
while(itr.hasNext())
{
String columnName = itr.next();
columnName = columnName.trim().toLowerCase();
String columnVal = portletPreferences.getValue(columnName, StringPool.BLANK);
al.add(columnName);
}
现在假设用户在配置页面{名字、姓氏、屏幕名称}中选择了以下列。因此该列表将仅包含这三个值。
基于这个选定的列,我需要在搜索容器中动态创建列 [<liferay-ui:search-container-column-text>
]。
<liferay-ui:search-container delta="5" emptyResultsMessage="no-users-were-found">
<liferay-ui:search-container-results
results="<%= ListUtil.subList(users, searchContainer.getStart(),searchContainer.getEnd()) %>"
total="<%= totalNoOfUsers %>">
</liferay-ui:search-container-results>
<liferay-ui:search-container-row className="com.liferay.portal.model.User" keyProperty="userId" modelVar="user">
</liferay-ui:search-container-row>
<liferay-ui:search-iterator />
</liferay-ui:search-container>
如何创建硬编码列,如下所示,
<liferay-ui:search-container-column-text name="Last Name" value="<%= user.getLastName() %>">
</liferay-ui:search-container-column-text>
需要一些建议,在此先感谢
可以使用<c:foreach>
或者scriptletfor
遍历列名ArrayList
,如下:
这里 entryColumns
是您保存的 ArrayList
列。
<%
for(String columnName : entryColumns) {
%>
<c:choose>
<c:when test='<%= "firstName".equals(columnName) %>'>
<liferay-ui:search-container-column-text name="First Name"> value="<%= user.getFirstName() %>" />
</c:when>
<c:when test='<%= "lastName".equals(columnName) %>'>
<liferay-ui:search-container-column-text name="Last Name"> value="<%= user.getFirstName() %>" />
</c:when>
<c:when test='<%= "birthDate".equals(columnName) %>'>
<liferay-ui:search-container-column-text name="Birth Date">
<fmt:formatDate value="<%= user.getBirthDate() %>" pattern="dd MMM yyyy" />
</liferay-ui:search-container-column-text>
</c:when>
</c:choose>
<%
}
%>
如果您不喜欢 scriptlet,则可以使用类似的东西:
<c:foreach items="${entryColumns}" var="columnName">
<c:choose>
<c:when test='${"firstName" eq columnName}'>
<liferay-ui:search-container-column-text name="First Name"> value="<%= user.getFirstName() %>" />
</c:when>
</c:choose>
</c:foreach>
您需要检查容器文本和值的 columnName
,因为它们是不同的,在某些情况下您可能想要编写一些额外的 HTML 而不是仅仅使用value
属性,这样它也可以处理。