claim voucher update表单问题

claim voucher update表单问题

老师您好,想问下这里的c:foreach 为什么不能用之前使用过的var属性定义一个变量,来代替DTO中items的变量名呢

<c:forEach items="${claimVoucherDTO.items}" var="voucherItems" varStatus="ind">
    <div class="section row" id="items">
        <div>
                <form:hidden path="voucherItems[${ind.index}].id"/>
                <form:hidden path="voucherItems[${ind.index}].claimVoucherId"/>
                <div class="col-md-3">
                    <label for="voucherItems[${ind.index}].item" class="field prepend-icon">
                        <form:select path="voucherItems[${ind.index}].item" cssClass="gui-input" placeholder="花销类型..." items="${items}"/>
                    </label>
                </div>
                <div class="col-md-3">
                    <label for="voucherItems[${ind.index}].amount" class="field prepend-icon">
                        <form:input path="voucherItems[${ind.index}].amount" cssClass="gui-input money" placeholder="金额..."/>
                        <label for="voucherItems[${ind.index}].amount" class="field-icon">
                            <i class="fa fa-lock"></i>
                        </label>
                    </label>
                </div>
                <div class="col-md-5">
                    <label for="voucherItems[${ind.index}].comment" class="field prepend-icon">
                        <form:input path="voucherItems[${ind.index}].comment" cssClass="gui-input" placeholder="备注..."/>
                        <label for="voucherItems[${ind.index}].comment" class="field-icon">
                            <i class="fa fa-lock"></i>
                        </label>
                    </label>
                </div>
                <div class="col-md-1" style="text-align:right;">
                    <button type="button" class="button"> X </button>
                </div>
        </div>
    </div>
</c:forEach>

我使用这种方法会导致页面加载不出来voucherItems

http://img1.sycdn.imooc.com//climg/5f214275090a1bff10320301.jpg谢谢

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,1、非常抱歉之前老师对var的描述有些不准确,在<c:foreach>标签中var其实表示的是当前条目的变量名称,比如:

http://img1.sycdn.imooc.com//climg/5f222d1109de842d04750268.jpg

运行结果:

http://img1.sycdn.imooc.com//climg/5f222d2109aef9a501790145.jpg

所以var表示的是当前条目的变量名称。对给同学造成的不便深感抱歉。

    2、当前页面使用了modelAttribute,modelAttribute:绑定 后台传过来的数据。

        使用spring提供的form表单时,可以通过设置modelAttribute属性,将所有表单要提交的内容都封装到一个对象中进行提交。

    所以这里建议直接写为items属性名,便于封装对象进行提交。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小班 2020-07-29 19:27:15

同学你好,1、课程案例中这里的items是指ClaimVoucherInfo下的items的集合

http://img1.sycdn.imooc.com//climg/5f2158a90905969409150290.jpg

http://img1.sycdn.imooc.com//climg/5f2158fa09c43f8609520423.jpg

比如:items[0].item和items[0].amount就是指某一条报销单的花销类型以及报销金额,所以这里在具体的数据遍历具体写法是items[[${sta.index}].comment。

    2、新创报销单的时候,如果把初始的费用明细条目删除掉再点击+按钮,这个按钮就失效了

这是因为在js中删除元素时,使用了

http://img1.sycdn.imooc.com//climg/5f215c900932d50b09000178.jpg

:last 选择器选取最后一个元素,删除之后再添加时,获取不到子元素了,所以就没有效果了

http://img1.sycdn.imooc.com//climg/5f215ce1093c015a10620195.jpg

这个属于js中的内容,同学如果有兴趣,可以在删除方法中添加一个判断。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 MarekZhang #1
    谢谢老师的回答。items[0].item和items[0].amount 这里的items是 <c:foreach items=${info.items}>中的第二个items对吧。如果是这样的话 我用var=“ voucherItems”来代替这个${infor.items}这种常用的jstl表达方法为什么不可以呢
    2020-07-29 19:34:48
好帮手慕小班 2020-07-29 17:49:01

同学你好,1、var 是表示当前条目的变量名称,varStatus 是循环索引。

    2、这里使用varStatus ,是因为当前页面中需要根据下标获取展示不同行数的内容,而varStatus属性可以方便我们实现一些与行数相关的功能。在课程中12分开始有具体的讲解,同学可以再来复习一下。

综上所示,这里要获取sta.index值,所以使用varStatus,而不是var。

如果同学想表达的不是这个意思,还麻烦同学具体描述一下。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 MarekZhang #1
    我不是这个意思。我使用了var,并且赋值为var="voucherItems",然后在下面的循环中使用了voucherItems进行迭代(e.g. voucherItems[${ind.index}].item),但是这种方法导致voucher items无法被识别出来也就是图中的效果,想知道这是为什么
    2020-07-29 18:20:25
  • 提问者 MarekZhang #2
    另外我还发现了个bug,就是我在新创报销单的时候,如果把初始的费用明细条目删除掉再点击+按钮,这个按钮就失效了
    2020-07-29 18:23:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师