从动态选择列表中检索值

时间:2014-06-19 07:10:30

标签: java javascript html jsp

我正在开发一个jsp项目,我有一个动态选择列表。此列表中的值根据第一个选择列表中选择的值而变化。 这是代码:

<script language="JavaScript" type="text/javascript">
function optionsChange(){   
    var service = document.getElementById("service").value;
    if(service == 'GSM'){   
        document.getElementById("cdmaService").value= '';
        document.getElementById("cdmaService").style.display = 'none';
        document.getElementById("gsmService").style.display = 'block';
        $('gsmService').attr('name', 'services');
    }else if(service == 'CDMA'){
        document.getElementById("gsmService").value= '';
        document.getElementById("gsmService").style.display = 'none';
        document.getElementById("cdmaService").style.display = 'block';
        $('cdmaService').attr('name', 'services');
    }
  }
</script>

<select id="service" onChange="javascript:optionsChange();">
            <option value="GSM">GSM</option>
            <option value="CDMA">CDMA</option>
</select>

<td id="gsmService" ><select name="services" > 

            <option value="COMBO OFFER">COMBO OFFER</option>  
            <option value="CRICKET">CRICKET</option>
            <option value="ASTRO">ASTRO</option>
</select>   
</td>

<td id="cdmaService" style="display:none"><select name="services" >
            <option value="COMBO OFFER CDMA">COMBO OFFER CDMA</option>
             <option value="WIN THE DREAM">WIN THE DREAM</option>
            <option value="VOICE CHAT">VOICE CHAT</option>          
        </select>
 </td>

现在当用户选择服务时,让我们说&#34; GSM&#34;,然后从第二个列表中选择一个服务,让我们说&#34; ASTRO&#34;。他点击了一个按钮,将他重定向到下一页,在那里他看到&#34; ASTRO&#34;打印。这很好用。 但是如果用户选择&#34; CDMA&#34;从第一个列表然后选择,让我们说&#34; VOICE CHAT&#34;从第二个清单。它仍然打印&#34; ASTRO&#34;在下一页。它应该打印&#34; VOICE CHAT&#34;。

这是提交表单的方法:

<script language=javascript>

function submitForm(actionStr)
{
    if(actionStr=="User Details")
    {
        document.login.action="showUsrDetail.jsp";
        document.login.submit();
    } 
}

这是按钮的代码:

<input type="button" value="User Details" onclick="submitForm(this.value);"/>

然后重定向到页面&#34;&#34; showUsrDetail.jsp&#34;。当它出现时,服务器的名称将打印在控制台上。代码是:

<% 
    String service = request.getParameter("services");
    System.out.println("Value Added Service selected is ="+service);
%>

如果我将第一个选择更改为CDMA,然后从第二个选择列表中选择任何服务,它仍会打印出GSM下的服务。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

由于您在submitForm()函数中没有执行任何操作,因此提交可以由<input type="submit>"直接实现的表单,如下面的示例所示。

<form action="showUsrDetail.jsp" id="login" method="post">
    <!-- other fields -->
    <input type="submit" value="User Details"/>
</form>

解决方案1 ​​

为所有选择字段使用不同的名称,并检查showUsrDetail.jsp中的值。

<form id="login" action="showUsrDetail.jsp" method="post">
    <table>
        <tr>
            <td><select id="service" onChange="javascript:optionsChange();"
                name="service">
                    <option value="GSM">GSM</option>
                    <option value="CDMA">CDMA</option>
            </select></td>
            <td id="gsmService"><select name="gsmService">
                    <option value="COMBO OFFER">COMBO OFFER</option>
                    <option value="CRICKET">CRICKET</option>
                    <option value="ASTRO">ASTRO</option>
            </select></td>

            <td id="cdmaService" style="display: none"><select
                name="cdmaService">
                    <option value="COMBO OFFER CDMA">COMBO OFFER CDMA</option>
                    <option value="WIN THE DREAM">WIN THE DREAM</option>
                    <option value="VOICE CHAT">VOICE CHAT</option>
            </select></td>
            <td><input type="submit" value="User Details" /></td>
        </tr>
    </table>
</form>

showUsrDetail.jsp:

<c:if test="${param.service == 'GSM'}">
    <c:out value="${param.gsmService}" />
</c:if>

<c:if test="${param.service == 'CDMA'}">
    <c:out value="${param.cdmaService}" />
</c:if>

解决方案2

添加hidden input字段,并根据cdmaServicegsmService选择项中的选择更改更新其值。在选择项目上添加更改侦听器。

<input type="hidden" name="serviceValue"/>

showUsrDetail.jsp:

<c:out value="${param.serviceValue}" />

<强> 注意:

  

我建议您使用JavaServer Pages Standard Tag LibraryExpression Language代替Scriplet更容易使用且不易出错