2013-09-19 4 views
0

Я новичок в JSF. Я использую JSF 2, и есть список, заполняемый моим файлом. В моем .xhtml файле я хочу отобразить эту информацию как 2 столбца.JSF 2 отображение значений списка в 2 столбцах

В боба класс модулей List; (Содержит module.enable module.name)

В списке есть сказать 30 модулей. Я хочу отобразить все эти данные модулей в 2 столбцах. Например, я хочу отобразить первую информацию модуля (module.enable module.name) в одном столбце, а второй во втором столбце. Или это могут быть первые 15 модулей в первом столбце, а остальные 15 во втором столбце. Пробовал с h: dataTable и h: panelGrid, но не смог заставить его работать.

Любая помощь будет высоко оценена.

Благодаря Shyju

ответ

0

Играя со значениями некоторых <h:dataTable> «s атрибуты», мы можем сделать что-то подобное: Атрибут first, idicates к первому индексу в списке, чтобы начать показ с, и rows 's one, указывает номер строки, который должен быть diplayed, начиная с начального индекса, спроектированного, если он был вызван, иначе он отображает из 1-го ряда и так далее.

Вот пример этого, полагаясь на 2 <h:dataTalbe> теги, включенные в один <h:panelGrid coulmns="2">, и полагаясь только на 4 модуля для упрощения, 2 за каждый столбец. Каждый <h:dataTable> тег должен иметь различное значение атрибута first:

Подкладочный боб:

@ManagedBean 
@RequestScoped 
public class ModuleBacking{ 

private List<Module> modules = new ArrayList<Module>(); 

public ModuleBacking() { 
} 

@PostConstruct 
public void insertion() { 
    Module m1 = new Module("math",true); 
    Module m2 = new Module("english",false); 
    Module m3 = new Module("physics",false); 
    Module m4 = new Module("chimics",true);   
    modules.add(m1); 
    modules.add(m2); 
    modules.add(m3); 
    modules.add(m4); 
} 

public List<Module> getModule() { 
    return modules; 
} 

public List<Module> displayModules(){ 
    return modules; 
} 

} 

Вид:

<h:body> 
    <h:panelGrid columns="2" cellspacing="3" cellpadding="3" style="border-style: solid" rules="all" > 
     <f:facet name="header"> 
      <h:outputText value="First 2 modules" style="padding-right:80px "/> 
      <h:outputText value="Second 2 modules"/> 
     </f:facet> 
      <h:dataTable value="#{moduleBacking.displayModules()}" var="m" rules="all" first="0" rows="2"> 
       <h:column> 
         <f:facet name="header" ><h:outputText value="Module's name" /></f:facet> 
         <h:outputText value="#{m.name}" /> 
       </h:column> 
       <h:column> 
        <f:facet name="header" ><h:outputText value="Module's enabling" /></f:facet> 
        <h:outputText value="#{m.enable}" /> 
       </h:column> 
      </h:dataTable> 
      <h:dataTable value="#{moduleBacking.displayModules() }" var="m" rules="all" first="2" rows="2"> 
       <h:column> 
         <f:facet name="header" ><h:outputText value="Module's name" /></f:facet> 
         <h:outputText value="#{m.name}" /> 
       </h:column> 
       <h:column> 
        <f:facet name="header" ><h:outputText value="Module's enable" /></f:facet> 
        <h:outputText value="#{m.enable}" /> 
       </h:column> 
      </h:dataTable> 

    </h:panelGrid> 
</h:body> 

В вашем случае два <h:dataTable> кажется как эти :

<h:dataTable value="#{moduleBacking.displayModules()}" var="m" rules="all" first="0" rows="15"> 

<h:dataTable value="#{moduleBacking.displayModules()}" var="m" rules="all" first="15" rows="15"> 
+0

Большое вам спасибо за вашу помощь. Я попробовал, и это работает как шарм. Но теперь я понимаю, что моя информация о модуле модуля считывается из базы данных, поэтому мы действительно не знаем, сколько элементов есть заблаговременно. Поэтому мне пришлось придумать другое решение, которое хорошо работает на данный момент. –

+0

Я хотел опубликовать этот код, но я не могу, так как я новый участник этого форума. В очередной раз благодарим за помощь. –

+0

Добро пожаловать. Если мы не знаем эффективного количества экземпляров модулей, которые будут прочитаны и отображены, то для этого мы можем использовать выражение EL, а не константу: '' '>' – Omar

1

Это мой код для решить эту проблему с помощью varStatus свойство Ui: повторить

<h:panelGrid id="moduleList" columns="2" border="1" > 
     <f:facet name="header"> 
      <h:outputText value="Modules"/> 
     </f:facet> 
     <ui:repeat value="#{EnableCodeBean.modules}" var="modules" varStatus="status"> 
      <h:panelGroup> 
       <h:selectBooleanCheckbox value="#{modules.enable}"/> 
       <h:outputText value="#{modules.name}"/> 
      </h:panelGroup> 
      <f:verbatim rendered="#{status.index mod 2 == 1}"> 
       &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; 
      </f:verbatim> 
      <f:verbatim rendered="#{status.index mod 2 == 0}"> 
       &lt;/td&gt;&lt;td&gt; 
      </f:verbatim> 
     </ui:repeat> 
    </h:panelGrid> 
Смежные вопросы