基于Arraylist动态显示liferay搜索容器列?

基于Arraylist动态显示liferay搜索容器列?,liferay,hook,liferay-6,liferay-theme,liferay-aui,Liferay,Hook,Liferay 6,Liferay Theme,Liferay Aui,我正在尝试动态显示liferay网格的列。出于同样的原因,参考下面链接中的一些建议,我在配置页面中为用户提供了一个选择表中所需列的选项。配置页面的选定列将保存在数组列表中 问题:现在我需要根据数组列表值显示列。我需要迭代列表并在表/网格中显示所选列,而不是硬编码列属性 假设我正在使用liferay默认用户模型。配置页面的所有选定列都保存在一个列表中,如下所示: ArrayList<String> al = new ArrayList<String>(); Iter

我正在尝试动态显示liferay网格的列。出于同样的原因,参考下面链接中的一些建议,我在配置页面中为用户提供了一个选择表中所需列的选项。配置页面的选定列将保存在数组列表中

问题:现在我需要根据数组列表值显示列。我需要迭代列表并在表/网格中显示所选列,而不是硬编码列属性

假设我正在使用liferay默认用户模型。配置页面的所有选定列都保存在一个列表中,如下所示:

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);
    }
ArrayList al=new ArrayList();
迭代器itr=al.Iterator();
while(itr.hasNext())
{
字符串columnName=itr.next();
columnName=columnName.trim().toLowerCase();
String columnVal=portletPreferences.getValue(columnName,StringPool.BLANK);
al.添加(列名称);
}
现在,假设用户在配置页面{First Name,Last Name,Screen Name}中选择了以下列。因此,列表将只包含这三个值

基于这些选定的列,我需要在搜索容器中动态创建列[
]

<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>

需要一些建议,请提前感谢

您可以使用
或scriptlet
for
遍历列名的
数组列表
,如下所示:

这里的
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
属性,这样它也可以处理这些问题。

太好了!!它工作正常,但只适用于字符串类型的值字段。您能告诉我如何显示时间戳、位整数和BIGINT类型的列值吗。我试过了,但不适用于辩论日期。请建议一些解决方案。。。