2014-09-09 2 views
0

Я заинтересован в возвращении нескольких списков в представление, чтобы в конечном итоге отобразить строки информации из совершенно разных запросов на одной странице. Я понял, как сделать следующее:Есть ли лучший способ вернуться и отобразить несколько списков в виде в Grails?

Вот мое действие в мой контроллер:

def processMultipleLists() 
{ 

    def stirList = [] 

    Person stirling = new Person('Stirling','Crow', 47) 
    Person lady = new Person('Lady','McShavers', 4) 

    stirList << stirling 
    stirList << lady 

    def kathieList = [] 

    Person kathie = new Person('Kathie','Esquibel', 47) 
    Person milagro = new Person('Milagro','Muffin', 4) 
    Person meeko = new Person('Meeko','Muffin', 4) 

    kathieList << kathie 
    kathieList << milagro 
    kathieList << meeko 

    def returnThisMap = [:] 
    returnThisMap.put('One', kathieList) 
    returnThisMap.put('Two', stirList) 


    return [returnMap : returnThisMap] 
} 

Grails затем возвращает «returnMap» (который содержит «returnThisMap», о которых говорится ниже, как «mapNum») на мой взгляд, который имеет следующее:

<g:if test="${returnMap.size() > 0}"> 

    <table border="1"> 

     <tbody> 
      <g:each in="${returnMap}" status="i" var="mapNum"> 
      <g:if test="${mapNum.getKey() == 'One'}"> 
       <tr> 
        <th>First Name</th> 
        <th>Last Name</th> 
        <th>Favorite Number</th> 

       </tr> 

       <g:each in="${mapNum.getValue()}" status="c" var="listVar"> 
        <tr> 
         <td>${listVar.firstName}</td> 
         <td>${listVar.lastName}</td> 
         <td>${listVar.favNumber}</td> 

        </tr> 
       </g:each> 



      </g:if> 
      <g:elseif test="${mapNum.getKey() == 'Two'}"> 
       <tr> 
        <th>First Name</th> 
        <th>Last Name</th> 
        <th>Favorite Number</th> 

       </tr> 

       <g:each in="${mapNum.getValue()}" status="c" var="listVar"> 
        <tr> 
         <td>${listVar.firstName}</td> 
         <td>${listVar.lastName}</td> 
         <td>${listVar.favNumber}</td> 

        </tr> 
       </g:each> 
      </g:elseif> 


      </g:each> 
     </tbody> 

    </table> 
</g:if> 
<g:else> 
    No records were found to display. 
</g:else> 

Это действительно работает. Он публикует информацию из обоих списков. Но ... он чувствует себя немного «взломанным», так как я должен использовать groovy tag для повторения значений ключа/пары в returnMap. Есть ли лучший способ отобразить несколько списков в Grails?

ответ

5

Объект, возвращаемый вашему представлению, уже является картой, поэтому нет необходимости создавать другую карту. Вы можете сделать это:

return [stirList: stirList, kathieList: kathieList] 

Затем на ваш взгляд, вы можете перемещаться по каждому из них в отдельности:

<g:each in="${stirList}" var="stir"> 
    ... 
</g:each> 
<g:each in="${kathieList}" var="kathie"> 
    ... 
</g:each> 

В вашем примере, это выглядит как списки содержат один и тот же тип и отображаются точно Таким образом, различие может даже не потребоваться.

+0

Perfect. Спасибо!! Это намного лучше, чем то, как я это делал. –

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

  • Нет связанных вопросов^_^