【问题标题】:How do I check in GSP Grails more than one time in list如何在列表中多次签入 GSP Grails
【发布时间】:2015-01-11 11:41:11
【问题描述】:

我想检查 GSP 页面。我有一个产品清单。该列表包含大约 21 种产品。我使用 g:each 循环 GSP 中的产品并使用 if/else 进行检查。请参阅下面的代码。但如果 product.id 不等于 3。页面显示/打印复选框“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>

【问题讨论】:

  • 您确定product.idString 值吗?如果是数字,则使用product.id == 3
  • @Igor 是的,我确定,它是一个字符串
  • 好的,所以您确定您有 20 个带有 id == '3' 的项目和 1 个带有 id != '3' 的项目。预计会有 20 行 Call me 和 1 行 Dont call me,对吧?
  • @Igor 我拥有的是具有不同产品 ID 的产品列表,因此我必须在不同时间进行检查。因此,如果 product.id 等于 1 则打印一些东西,如果 product.id 等于 2 则...否则...等...
  • 您可以使用 hashmap(或其他类型的映射)来使用产品 id 作为键和请求的字符串作为值。

标签: java grails gsp


【解决方案1】:

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

如果您不使用调试器,请添加新的&lt;td&gt;

<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>

【讨论】:

  • 感谢您的回答。它还不起作用。我会用例子来解释我的问题。我不够清楚。请看上面
  • 我调试它。 if 检查工作正常。但 else 打印了好几次
  • 您需要使用 if、elseif、else,尽管编写多个 elseif 标签有点重复。见:grails.org/doc/latest/ref/Tags/elseif.html
  • 在没有 if else 的情况下,在 GSP 中还有其他方法吗??
  • 您可以在控制器中创建 2-3 个地图并将它们作为变量传递给视图。例如在 java 中:HashMap callme= new HashMap(); calleme.put(2, '要显示的内容');因此,您可以将这样的对象传递给视图并像 callme,get(product.id) 一样使用它。 java 代码在 grails 中工作,但显然有 grails 替代品。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多