Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 正在创建注册页。获取日期时遇到问题_Jsp - Fatal编程技术网

Jsp 正在创建注册页。获取日期时遇到问题

Jsp 正在创建注册页。获取日期时遇到问题,jsp,Jsp,我已经创建了一个注册页面,在那里我从持卡人那里获取了一些关于该卡的详细信息。 当我从用户处获取月份和日期时,所选日期会自动显示在下拉框中。这会使同一日期显示两次。代码如下: <strong>Expiry Date *<br /> <select name="edmm" id="month"> <% if( month != null) { %> <option value

我已经创建了一个注册页面,在那里我从持卡人那里获取了一些关于该卡的详细信息。 当我从用户处获取月份和日期时,所选日期会自动显示在下拉框中。这会使同一日期显示两次。代码如下:

<strong>Expiry Date *<br />
<select name="edmm" id="month">
                  <% if( month != null) { %>
                  <option value="<%=month%>" selected="selected"><%=month%></option>
                  <% } else { %>
                  <option selected></option>
                  <% } %>                  

                  <% 
                        for(int i=1;i<=12;i++) { 
                                            String mmStr = "";
                                            if (i < 10)
                                                mmStr = "0" + i;
                                            else
                                                mmStr = "" + i; 
                                        %>
                  <option value="<%=mmStr%>" ><%=mmStr %></option>
                  <%        }
                  %>

                </select>

                <select name="edyy" id="year">
                  <% if( year != null) { %>
                  <option value="<%=year%>"  selected="selected"><%=year%></option>
                  <% } else { %>
                  <option selected></option>
                  <% } %>
                  <% 
                    for(int i=(yy);i<=(yy+50);i++) {
                  %>
                  <option value="<%=i%>" ><%= i %></option>
                  <% } %>
                </select><br />
                 <label for="label" class="rightmargin">&nbsp;&nbsp;<sup>month</sup></label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 <label for="label" class="rightmargin"><sup>year</sup></label>
</strong><br />
有效期*

月 年


好吧,这是一个交易——理想情况下,你应该使用JSTL
c:forEach
而不是你正在使用的代码循环一个月和年的地图。有人可能会指出一个更好的方法,但我会回答你提出的具体问题

这是如何避免在下拉列表中重复所选日期

我假设用户选择日期并提交回同一页面,并且您希望提交的mm/yyyy在循环中预先选择,而不是重复

您需要设置一个if条件,检查下一个选项元素(将要显示)是否与已选择的元素不相等

因此,对于月循环,改变

<option value="<%=mmStr%>" ><%=mmStr %></option>


这一年,改变

<option value="<%=i%>" ><%= i %></option> 


记住,使用这种方法时,选定的值将位于顶部。因此,如果用户选择“04”月,下拉列表实际上会显示为不同步

<option value="04" selected="selected">04</option>



          <option value="01" >01</option>

          <option value="02" >02</option>

                  <option value="03" >03</option>

          <option value="05" >05</option>
04
01
02
03
05

等等。但这是另一个故事。

我想帮你解决这个问题,我盯着这段代码看了5分钟,但我无法很快清楚地计算出确切的流程,我的眼睛开始流血。很抱歉,但我强烈建议不要使用scriptlet,而只使用taglib,并将所有原始Java代码保留在JSP之外。我想@JoseK已经搞定了,但我无法证实。然而,他还是得到了我的支持,因为我努力去理解代码

另见:

我猜功能需求只是在显示期间预先选择选项。如果这是真的,那么使用JSTL就很容易了(只需访问
/WEB-INF/lib
安装它)

${month==card.month?'selected':“}
基本上是指:“如果当前迭代的月数与卡的月数匹配,则打印
所选的
,否则不打印任何内容。”。就这么简单:)

另见:

这看起来像是从1999年的一本JSP书籍中摘取的。如果我听起来很刺耳,请原谅。它不是个人的,你是好的,它只是代码中的坏习惯:谢谢:我实际上熟悉这种旧式的脚本代码-因此可以想出一点。谢谢你的回答,但是问题是,在选择之前,空白是不可见的。我希望盒子最初是空白的。我该怎么做?你想要一张空白的?然后把a作为第一个选项。
 <%
            if (Integer.parseInt(year) != i){

          %>

                  <option value="<%=i%>" ><%= i %></option>
                  <% } 

          %>
<option value="04" selected="selected">04</option>



          <option value="01" >01</option>

          <option value="02" >02</option>

                  <option value="03" >03</option>

          <option value="05" >05</option>
<select name="month">
    <c:forEach begin="1" end="12" var="month">
        <option value="${month}" ${month == card.month ? 'selected' : ''}>${month}</option>
    </c:forEach>
</select>
<select name="year">
    <c:forEach begin="2010" end="2020" var="year">
        <option value="${year}" ${year == card.year ? 'selected' : ''}>${year}</option>
    </c:forEach>
</select>
public class Card {
    private String number;
    private Integer month;
    private Integer year;
    // Add/generate getters and setters.
}