2010-05-25 5 views
0

pour quelques raisons que je suis en train de traduire le code de la vue RoR suivant une vue GSP:Traduction d'une vue RoR à Java

List<Object> objects contient les données que je veux afficher dans 3 colonnes

<% 
modulo_objects = @objects.length % 3 
base = @objects.length/3 
base = base.ceil 
case modulo_objects 
    when 0 
cols = [base, base, base] 
    when 1 
cols = [base, base + 1, base] 
    when 2 
cols = [base + 1, base, base + 1] 
end 

counter = 0 
%> 

<% 3.times do |i| %> 
<td width="220" align="center" style="padding-right: 15px;"> 
     <% cols[i].times do %> 
    <h1><a href="/objects/show/<%= @objects[counter].urlname %>" ><%= @objects[counter].name %></a></h1> 
    <% counter = counter + 1 %> 
    <% end %> 
</td> 
<% end %> 

Voilà ce que je suis arrivé à ce jour:

#{extends 'main.html' /} 
%{ 
modulo_objects = objects.size() % 3 
base = objects.size()/3 
base = Math.ceil(base) 
if(modulo_objects == 0) 
    cols = [base, base, base] 
else if(modulo_objects == 1) 
    cols = [base, base + 1, base] 
else if(modulo_objects == 2) 
    cols = [base + 1, base, base + 1] 
endif 

counter = 0 

}% 

#{list items:1..3, as:'i'} 
    <td width="220" align="center" style="padding-right: 15px;"> 
     #{list items:cols[i]} 
      <a href="@{Objects.show(objects.get(counter).name.replaceAll(" ", "-"))}" >${objects.get(counter).name}</a> 
      %{ counter = counter + 1 }% 
     #{/list} 
    </td> 
#{/list} 

L'idée est de garder les articles organisés en 3 colonnes comme 1 | 0 | 1 4 | 5 | 4 ou 5 | 4 | 5 par exemple, Je ne t vraiment sous se tenir si #{list items:cols[i]} va reproduire cols[i].times do de ruby.

Jusqu'à présent, la vue Java n'affiche pas plus de deux éléments.

+0

Vous êtes mon héros. – Daniel

+0

Bonjour mnml. Vous devez dire quel est le problème. Vous venez de dire ce que vous faites. Est-ce que quelque chose ne fonctionne pas? –

+2

le turk mécanique d'amazon ne serait-il pas le meilleur endroit pour cette tâche? –

Répondre

0
public static List<Object>[] splitIn(List<Object> objects, int i) { 

    int base_objects = objects.size()/i; 
    int modulo_objects = objects.size() % i; 
    int[] colSize = new int[i]; 

    switch (modulo_objects) { 
     case 0: 
      colSize[0] = base_objects; 
      colSize[1] = base_objects; 
      colSize[2] = base_objects; 
      break; 
     case 1: 
      colSize[0] = base_objects; 
      colSize[1] = base_objects + 1; 
      colSize[2] = base_objects; 
      break; 
     case 2: 
      colSize[0] = base_objects + 1; 
      colSize[1] = base_objects; 
      colSize[2] = base_objects + 1; 
      break; 
    } 

    List<Object>[] columns = new List[i]; 

    int count = 0; 
    for (int x = 0; x < i; x++) { 
     List<Object> col_objects = new ArrayList(); 
     int colCount = 0; 
     while (colCount < colSize[x]) { 
      Object Object = (Object) objects.get(count); 
      col_objects.add(Object); 
      colCount++; 
      count++; 
     } 
     columns[x] = col_objects; 
    } 
    return columns; 
} 






#{list cols, as:'column'} 
    <td width="220" align="center" style="padding-right: 15px;"> 
     #{list column, as:'object'} 
       <h1><a href="@{Objects.show(object.urlName())}" >${object.name}</a></h1> 
     #{/list} 
    </td> 
    #{/list} 
0

juste un commentaire (désolé ne dispose pas de privilèges):

je pense que le code ci-dessus votre code html doit aller à votre contrôleur depuis que le style de codage rend votre vide de framework MVC: P juste dire