如何在列表中多次签入 GSP Grails

How do I check in GSP Grails more than one time in list

我想在 GSP 页面中进行检查。我有一份产品清单。该列表包含大约 21 种产品。我使用 g:each 循环 GSP 中的产品,并使用 if/else 进行检查。请参阅下面的代码。但是如果 product.id 不等于 3。页面 displays/prints checkBox "dontCallMe" 21 次,我希望打印一次。这是为什么?还有其他方法可以检查吗?谢谢

     <g:each in="${products}" var = "product">
                        <g:if test="${product.id == '3'}">
                            <tr>
                            <td>
                             <g:checkBox name="callMe" checked="true"
                                                value=""/>&nbsp; Call me
                            </td>
                            </tr>
                        </g:if>
                       <g:else>            
                           <tr>
                               <td>
                                   <g:checkBox name="callMe" checked="false"
                                                value=""/>&nbsp; Call me
                               </td>
                           </tr>
                       </g:else>
     <g:if test="${product.id == '4'}">
                            <tr>
                            <td>
                             <g:checkBox name="callMeAgain" checked="true"
                                                value=""/>&nbsp; Call me again
                            </td>
                            </tr>
                        </g:if>
                       <g:else>            
                           <tr>
                               <td>
                                   <g:checkBox name="callMeAgain" checked="false"
                                                value=""/>&nbsp; Call me again
                               </td>
                           </tr>
                       </g:else>
 <g:if test="${product.id == '5'}">
                            <tr>
                            <td>
                             <g:checkBox name="dontCallMeAgain" checked="true"
                                                value=""/>&nbsp; Dont call me again
                            </td>
                            </tr>
                        </g:if>
                       <g:else>            
                           <tr>
                               <td>
                                   <g:checkBox name="dontCallMeAgain" checked="false"
                                                value=""/>&nbsp; Dont call me again
                               </td>
                           </tr>
                       </g:else>
                   </g:each>

如果您有 21 件产品,并且 dontCallMe 出现 21 次,则表示您的条件始终为假。 我要做的是打开 debugger 中的代码并验证该对象是否具有您期望的期望值和类型。

如果您不使用调试器,请添加一个新的 <td>

<td>
`${product.id}`
</td>

此外,如果您没有调试器,请尝试这样的操作(我自己还没有尝试过):

<td>
`${product.id?.getClass()}`
</td>

使用调试代码进行简化

最后,代码可以简化如下(错别字请见谅):

<g:each in="${products}" var = "product">
    <tr>
         <td>
             <g:checkBox name="${product.id == '3' ? 'CallMe' : 'DontCallMe'}" 
             checked="${product.id == '3' ? 'true' : 'false'}"
             value=""/>${product.id == '3' ? 'CallMe' : 'DontCallMe'}"
         </td>
         <td>
              DEBUG: ${product.id} <br/>
              DEBUG: ${product.id?.getClass()} <br/>
         </td>
    </tr>
</g:each>