如何将复选框值(已选中/未选中)作为jsp中的href参数传递给控制器

时间:2015-04-02 10:40:59

标签: java jsp checkbox

我是jsp的初学者。我想从数据库中获取数据并在复选框上显示,这取决于db值,即0或1.这对我有用。但是当我检查或取消选中时,我也想要o复选框,它将重置值并将其作为href参数传递给控制器​​。 这是我的jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
    <title>Investor Account</title>
</head>

    <body>

  <script type="text/JavaScript">
            function updateCheck(){

                if(document.getElementById('chk').checked){
                     document.getElementById('chk').value = 1;
                     location.href=""
                     alert(document.getElementById('chk').value);



                 }
                else{
                      document.getElementById('chk').value = 0;
                      alert(document.getElementById('chk').value);


                }

            }

</script>
        <div align="center">
            <h1>Investor Account List</h1>

            <table border="1">
                <th>ID</th>
                <th>Investor Code</th>
                <th>Investor Name</th>
                <th>SMS Subscriber</th> 
                <th>Action</th>         
                <c:forEach var="investorAcc" items="${listInvestorAcc}" varStatus="st">
                <tr>
                    <td>${st.index + 1}</td>
                    <td>${investorAcc.investor_code}</td>
                    <td>${investorAcc.investor_name}</td>
                    <td> <input type="checkbox" id="chk" name="chkSms" value=  <c:if test="${investorAcc.sms_sub==1}">1</c:if> onclick="updateCheck();"
                    <c:if test="${investorAcc.sms_sub==1}">checked="checked"</c:if>/>

                  <td>

                      <a href="updateInvestorAcc?id=${investorAcc.id}&chkSms=<c:if test="${chkSms==1}">1</c:if>"> Update </a>
                   </td>

                </tr>

                </c:forEach>             
            </table>
        </div>
    </body>
</html>

2 个答案:

答案 0 :(得分:0)

要更新复选框值,最简单的方法是使用循环中的表单。尝试

<c:forEach var="investorAcc" items="${listInvestorAcc}" varStatus="st">
   <form action="updateInvestorAcc">
      <input type="hidden" name="id" value="${investorAcc.id}"/>
      <tr>
          <td>${st.index + 1}</td>
          <td>${investorAcc.investor_code}</td>
          <td>${investorAcc.investor_name}</td>
          <td>
              <c:choose>
                 <c:when test="${investorAcc.sms_sub==1}">
                   <input type="checkbox" id="chk" name="chkSms" 
                        value="${investorAcc.sms_sub}" checked="checked"/>
                 </c:when>
                 <c:otherwise>
                     <input type="checkbox" id="chk" name="chkSms" 
                           value="${investorAcc.sms_sub}"/>
                 </c:otherwise>
              </c:choose><td> <!-- end of checkbox -->
          <td><input type="submit" value="Update"></td>
      </tr>
   </form> 
</c:forEach>

修改

您需要Servlet来获取更新值

@WebServlet("/updateInvestorAcc")
public class UpdateInvestorAcc extends HttpServlet {

 public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {

     String idStr=request.getParameter("id");
     int id= Integer.parseInt(idStr);// If you need to parse to int
     String[] chkSms=request.getParameterValues("chkSms");
     boolean isChkSms =false;
     if(chkSms !=null && chkSms.length > 0){//If checkbox is checked than assign it with true or 1       
         isChkSms=true;  
     }

    // Now update the DB with id and checkbox value.
 }

答案 1 :(得分:0)

您可以使用基本的IF测试来简化其他海报建议中的中间部分。因为它只会是1或0(所以选择IMO是过大的选择)。从技术上讲,因为它是1/0,所以您甚至不需要== 1比较器,只需在test =“”块中将其原始引用为test =“ $ {investorAcc.sms_sub}”。 JSTL足够聪明,可以处理所有角度(包括NULL)。 1 = true,0 = false,NULL = false。

<c:forEach var="investorAcc" items="${listInvestorAcc}" varStatus="st">
<form action="updateInvestorAcc">
    <input type="hidden" name="id" value="${investorAcc.id}"/>
    <tr>
        <td>${st.index + 1}</td>
        <td>${investorAcc.investor_code}</td>
        <td>${investorAcc.investor_name}</td>
        <td>
            <input  type="checkbox" id="chk" name="chkSms" 
                    value="${investorAcc.sms_sub}" <c:if test="${investorAcc.sms_sub==1}">checked="checked"</c:if>/>
        <td> <!-- end of checkbox -->
        <td><input type="submit" value="Update"></td>
    </tr>
</form> 
</c:forEach>

关于“未选中”框传递无效值的第二点。 HTML真是太烦人了。提交表单时,未选中的框会被“丢弃为空”。许多人都在补充第二个隐藏输入,以完成此操作而没有NULL错误(请注意,它必须是第二个)。不同的“ ID”,但相同的“ NAME”,因此Servlet将看到它并捕获其中的“未检查”值,而不是NULLed原始复选框:

例如:

<td>
    <input  type="checkbox" id="chk" name="chkSms" 
            value="${investorAcc.sms_sub}" <c:if test="${investorAcc.sms_sub==1}">checked="checked"</c:if>/>
    <input  type="hidden" id="chk_0" name="chkSms"
            value="0"/>
<td> <!-- end of checkbox -->