访问列表中的各个元素

时间:2012-10-08 08:54:04

标签: grails

我有一份名单,比方说,人。每个人都有一个“朋友”字段,可以是“是”或“否”。他们的“友谊”状态显示在列表的一列中:

<g:if test="${person.friend.status=='no' }">
<td><g:textField name="status" value="${person.friend.status}" readonly="readonly" style="width:60px;border:0px; background:transparent;color:black"/></td>

        <td style="width:20px">
<g:actionSubmitImage action="acceptFriend" value="aceptar"  src="${resource(dir: 'images', file: '/skin/tick_16.png')}" style="width:5px;height:8px;"/>
       </td>
       <td>
        <g:actionSubmitImage action="refuseFriend" value="aceptar"  src="${resource(dir: 'images', file: '/skin/wrong_16.png')}" style="width:5px;height:8px;"/>    
        </td>       
        </g:if>

正如你所看到的,当朋友状态为“否”时,会出现两个按钮,一个说“那个人是我的朋友”,另一个说“这个人不是我的朋友”。我的问题是:

当我点击“此人是我的朋友”的图像时,我将动作称为“acceptFriend”。但是,如何访问单个人实例,将其状态更改为“是”,并保留在数据库中?我认为它可能与“params”变量有关,但是如何将它存储在Controller中以便在Controller中访问?

谢谢!

4 个答案:

答案 0 :(得分:1)

我相信,你不能像这样使用g:actionSubmitImage,因为在标签的文档中写道:

除非添加一些自定义JavaScript,否则不能在同一表单中使用多个actionSubmitImage标记,并使其在Internet Explorer 6或7中工作。请参阅此页面以获取更多信息和解决方法

正确的解决方案是在列表中为每个朋友创建一个表单,然后您可以轻松传递域类的ID。

答案 1 :(得分:1)

actionSubmitImage以某种形式创建提交按钮。

为您要迭代的列表中的每个person创建表单。

在该表单中,添加名为“id”的隐藏字段,其值为“$ {person.id}”,并在acceptFriend操作中从params.id读取。

答案 2 :(得分:0)

<a href="${createLink(action: 'refuseFriend', id: person.id)}"><img src="${resource(dir: 'images', file: '/skin/wrong_16.png')}" style="width:5px;height:8px;" /></a>

这不是经过测试的代码,只是为了给你一个想法。

答案 3 :(得分:0)

根据Tom Metz的要求,我发布了两个g:actionSubmitImage标签的代码片段:

<form>
        <g:hiddenField name="contrato" value="${factura.id}"/>
<td>    <g:link title="${message(code :'contratosVer.tooltip')}" controller="campaign" action="show" id="${factura.id}" style="width:160px"> <g:img dir="images" file="/skin/eye_16.png"/></g:link> </td>

        <td><g:textField name="campaign" value="${factura.nombre}" readonly="readonly" style="width:120px;border:0px; background:transparent;color:black"/></td>

        <td><g:textField name="total" value="${factura.presupuestosPendientes.total}" readonly="readonly" style="width:40px;border:0px; background:transparent;color:black"/></td>
            <g:if test="${factura.estado=='Espera'}">

                        <td><g:textField name="estado" value="${factura.estado}" readonly="readonly" style="width:60px;border:0px; background:transparent;color:black"/></td>


        <td style="width:20px">
        <g:actionSubmitImage action="aceptarCamp" value="aceptar"  src="${resource(dir: 'images', file: '/skin/tick_16.png')}" style="width:5px;height:8px;"/>
       </td>
       <td>
        <g:actionSubmitImage action="rechazarCamp" value="aceptar"  src="${resource(dir: 'images', file: '/skin/wrong_16.png')}" style="width:5px;height:8px;"/>    
        </td>       
        </g:if>
            <g:else>

                        <td><g:textField name="estado" value="${factura.estado}" readonly="readonly" style="width:65px;border:0px; background:transparent;color:black"/></td>

                        <td></td><td></td>
            </g:else>
        <g:set var="desc" value="${result.toString()}" />
        <g:if test="${desc.size() > 120}"><g:set var="desc" value="${desc[0..120] + '...'}" /></g:if>
                        </form>

对不起延迟,伙伴,但我已经离开工作三天了。