2015-07-14 2 views
1

Я пытаюсь динамически отображать столбцы сетки liferay. По той же причине, ссылаясь на некоторое предложение по следующей ссылке: Dynamic columns in liferay-ui:search-container?, я предоставляю пользователю возможность выбрать нужные столбцы таблицы на странице конфигурации. Выбранные столбцы страницы конфигурации сохраняются в списке массивов.Динамически отображать столбцы liferay-search-container на основе Arraylist?

выпуск: теперь мне нужно отобразить столбцы на основе значений списка массивов. Вместо жесткого кодирования свойств столбца мне нужно перебрать список и отобразить выбранный столбец в таблице/сетке.

Предположим, что я работаю над моделью 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> 

нужны некоторые предложения, спасибо заранее

ответ

1

Вы можете использовать <c:foreach> или скриптлет for пересечь 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> 

<% 
} 
%> 

Если вы не поклонник скриптлетах, чем вы можете использовать что-то вроде:

<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, поэтому так оно и заботится об этом.

+0

Отличный !! Он работает нормально, но он работает только для полей значений типа string. Не могли бы вы предложить мне, как я могу отображать значения столбца TIMESTAMP, BIT INTEGER и BIGINT. Я пробовал , но он не применим для даты аргумента. Пожалуйста, предложите некоторое решение, пожалуйста ... –

Смежные вопросы