使用变量作为键访问gsp页面Grails中的Map值

时间:2016-03-03 18:58:48

标签: grails gsp

我正在尝试使用模板动态创建多个div,该模板被多次调用,每次我创建一个新的div ...这似乎工作得很好,下面是代码。我将地图tempMap从控制器传递到gsp页面,格式为以下格式

         tempMap = [key_1:v1,key_2:v2,key_3:v3] //from the controller

         //this is the gsp part
        <g:set var="counter" value="${1}" />
        <g:while test="${counter <= tempMap.counter}">
        <g:render template="travelDetailsToShow" />
        <g:set var="counter" value="${counter + 1}" />
        </g:while>

我需要根据也正常工作的计数器设置元素的ID ...但是我无法设置字段的值。

                <div class="col-sm-6" id="key_${counter}"> // This sets the id to key_1, key_2 depending on the counter value
                    <div class="form-group">
                        <label>Departure Date</label>
                        <span class="input-icon-right input-group">
                            <g:set var="temp" value="kep_${counter}" />
                            **<input type="text" name="key_${counter}" class="form-control" value="${tempMap?.key_${counter}}" readonly></input> // this does not work** 
                            <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
                        </span>
                    </div>
                </div>

我搜索了很多,但没有运气......任何人都可以告诉我这里哪里出错了..任何帮助都表示赞赏...先谢谢你们了

2 个答案:

答案 0 :(得分:0)

渲染标记具有模型属性。它的工作方式类似于从控制器传递到视图的模型。您可以使用它将数据传递到模板中。

视图

<g:each in="${1..tempMap.counter}" var="counter">
    <g:set var="key" value="key_${counter}">
    <g:render template="travelDetailsToShow" model="${[id: key, value: tempMap[key]]}"/>
</g:each>

模板

<div class="col-sm-6" id="${id}">
    <div class="form-group">
        <label>Departure Date</label>
        <span class="input-icon-right input-group">
        <input type="text" name="${id}" class="form-control" value="${value}" readonly></input>
         <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
                        </span>
     </div>
 </div>

答案 1 :(得分:0)

感谢Emmanuel的回答...但我认为我不够清楚并且误导你认为&#34;键&#34;将是静态的......因为你的逻辑会期望静态值&#34;键&#34; .....地图的正确结构如下......

       tempMap = [key_1:v1,anotherkey_1:v2,yetanotherkey_1:v3,key_2:v4,anotherkey_2:v5,yetanotherkey_2:v6]

我没有尝试过你发布的解决方案,但得到了另一种解决方案......下面的代码......

                <div class="col-sm-6" id="key_${counter}">
                    <div class="form-group">
                        <label>Departure Date</label>
                        <span class="input-icon-right input-group">
                            <input type="text" name="key_${counter}" class="form-control" value='${tempMap?."${'key_' + counter}"}' readonly></input>
                            <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
                        </span>
                    </div>
                </div>
                <div class="col-sm-6" id="anotherkey_${counter}">
                    <div class="form-group">
                        <label>Return Date</label>
                        <span class="input-icon-right input-group">
                            <input type="text" name="anotherkey_${counter}" class="form-control" value='${tempMap?."${'another_' + counter}"}' readonly></input>
                            <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
                        </span>
                    </div>
                </div>
            </div>

问题是我没有正确引用Map中的值...失败的代码如下所示。

                                <div class="col-sm-6" id="departureDate_${counter}">
                    <div class="form-group">
                        <label>Departure Date</label>
                        <span class="input-icon-right input-group">
                            **<input type="text" name="departureDate_${counter}" class="form-control" value="${tempMap?.${departureDate_counter}"} readonly></input>** // THIS CODE DOES NOT WORK. This will look for a key ${departureDate_counter} and will through a gsp error that tags have not been closed
                            <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
                        </span>
                    </div>
                </div>

虽然我找到了解决问题的方法,但如果我们发布更多解决方案会更好,因为我觉得网上没有很多解决方案可用于grails和gsp ......