动态javaWeb常常需要和后台交互的,作为新手,目前发现的想前台传值有两种方法。
使用Model或者ModelAndView方法
这种传值在jsp页面上是直接可以拿到值进行互动的,缺陷是多次互动不如加载js
方便,只适合进行第一次
使用ajax进行页面互动,再将值传入jsp页面
这种传值方式在多次交互时很方便,但是当数据多的时候,我们就要进行一些拼字符串处理,而且页面的样式也是不好加。
foreach在标签中使用:
最近碰见了一个问题,是在使用Model进行传值时,对复选框进行匹配,使用两个<c:foreach>进行匹配,
刚开始的时候是没有问题的,但是当内部的foreach有多个值时,复选框就会出现相同的多个,于是发现了一个很矛盾的问题,JSTL的foreach是不可以嵌套使用的,会出现数据重复的问题,但是不嵌套的话,值又匹配不上。
而且百度上也找不到这个问题的解决办法,最后在前端同事的指导下,找到了一个解决方法,(我的这个前端同时学过PHP,说是PHP中有一个解决的方法),如下:
<c:forEach items="${role}" var="r" >
<input type="checkbox" name="findRole" value="${r.roleName}"
<c:forEach items="${roleName}" var="rn" >
<c:if test="${r.roleName==rn}">
${r.roleName==rn ? 'checked = "checked"' : ''}
</c:if>
</c:forEach>
/>${r.roleName}
</c:forEach>
这里有两个后台传来的值,一个是角色的所有种类,一个是此人员的角色,我们需要用人员的角色来匹配所有的角色,相等的时候就可以让复选框选,通过在标签中写循环和判断可以简便的解决这个问题。
第一个foreach是在input标签的外面加着,类似于这样
<c:forEach items="${role}" var="r" >
<input type="checkbox" name="findRole" value="${r.roleName}" />
</c:forEach>
第二个foreach是在input标签中加的,并且进行了逻辑判断,是否匹配
<input type="checkbox" name="findRole" value="${r.roleName}"
<c:forEach items="${roleName}" var="rn" >
<c:if test="${r.roleName==rn}">
${r.roleName==rn ? 'checked = "checked"' : ''}
</c:if>
</c:forEach>
/>
这样就解决了内部foreach因为多条数据而出现的多个相同复选框的问题
当使用一个foreach进行匹配是,就没有那么麻烦了,类似于这样
部门下拉框的选中,直接在内部进行匹配
<select name="deptId">
<c:forEach items="${dep}" var="d" >
<option value="${d.dept_id}" ${user.deptId == d.dept_id ? 'selected = "selected"' : '' }>${d.dept_name}</option>
</c:forEach>
</select>