java - 如果在用户选择的基础上不工作
问题描述
我正在处理 HTML 表格。为此,我从我的 Java 代码中返回 JSON。我有一个作为 HTML 页面的 UI,其中有一个具有从日期到日期的表单和一个具有 4 个这样的选项的选择标签
<form id="formId" method="get">
<div class="container">
<h4>Start Date:</h4>
<input type="text" id="startdate" name="fromdate" width="276"
placeholder="dd/mm/yyyy" required />
<h4>End Date:</h4>
<input type="text" id="enddate" name="todate" width="276"
placeholder="dd/mm/yyyy" required />
<h4>Outlets:</h4>
<select name="outlet" id="all">
<option>ALL</option>
<c:forEach var="item" items="${obj.outlet}">
<option>${item}</option>
</c:forEach>
</select>
<br>
<br>
<div>
<button id="button" class="btn btn-default" type="submit">Search</button>
</div>
</div>
</form>
我从表单中获取输入并在 doget 方法中获取 servlet 中的值,如下所示:
String fromdate=request.getParameter("fromdate");
String todate=request.getParameter("todate");
String outlet=request.getParameter("outlet");
// System.out.println(String.format("fromdate: %s, todate: %s, outlet: %s", new Object[]{fromdate, todate, outlet}));
List<String> outletList = Arrays.asList(outlet.split("\\s*,\\s*"));
try {
String json = HourlySalesDateOutlet.createJson(outletList, fromdate, todate);
response.getWriter().write(json);
// System.out.println("dheeraj"+json);
}
catch (Exception e) {
e.printStackTrace();
}
}
现在这是我的 Java 类,我在其中编写了两个查询,一个是用户选择全部,另一个是用户选择特定出口。我的问题是 if 语句没有执行只有 else 正在执行如果用户从 FORM 中选择一个出口如果用户选择 ALL 则它不起作用。
下面是我的代码:
public static String createJson(List<String> outletList, String startDate, String endDate) throws Exception {
Connection con = null;
String query1;
List<Map<String, String>> mapList = new LinkedList<Map<String, String>>();
String outletStr = outletList.stream().collect(Collectors.joining("','", "('", "')"));
if (outletList.equals("ALL")) {
query1 = "SELECT a.OUTLET,b.CUSTOMERDESCRIPTOR,a.BILLDATE,HOUR(a.BILLTIME) AS HOURS, SUM(a.NETAMOUNT) AS AMOUNT FROM SYNCBILL a,ecustomer b WHERE a.OUTLET=b.CUSTOMERIDENTIFIER AND a.CANCELLED<>'Y' AND a.BILLDATE BETWEEN STR_TO_DATE(REPLACE('"
+ startDate + "','/','.'),GET_FORMAT(DATE,'EUR')) AND STR_TO_DATE(REPLACE('" + endDate
+ "','/','.'),GET_FORMAT(DATE,'EUR')) GROUP BY OUTLET,BILLDATE,HOUR(BILLTIME)";
System.out.println("all"+query1);
} else {
query1 = "SELECT a.OUTLET,b.CUSTOMERDESCRIPTOR,a.BILLDATE,HOUR(a.BILLTIME) AS HOURS, SUM(a.NETAMOUNT) AS AMOUNT FROM SYNCBILL a,ecustomer b WHERE a.OUTLET=b.CUSTOMERIDENTIFIER AND b.CUSTOMERDESCRIPTOR in "
+ outletStr + " AND a.CANCELLED<>'Y' AND a.BILLDATE BETWEEN STR_TO_DATE(REPLACE('" + startDate
+ "','/','.'),GET_FORMAT(DATE,'EUR')) AND STR_TO_DATE(REPLACE('" + endDate
+ "','/','.'),GET_FORMAT(DATE,'EUR')) GROUP BY OUTLET,BILLDATE,HOUR(BILLTIME)";
System.out.println("2"+query1);
}
try {
con = DBConnection.createConnection();
PreparedStatement ps = con.prepareStatement(query1);
ResultSet rs = ps.executeQuery();
Map<RecordKey, Long> mapData = getMapList(rs);
}
我没有发布完整的 Java 代码。我想要的是如果用户选择所有然后 if 语句应该执行并且其中的查询应该执行。如果用户选择 else,那么 other 应该可以工作,并且在我的代码中只有 else 在没有执行时才有效。
我该如何调试呢?
解决方案
对于您的问题,我有一个简单的解决方案。当用户选择全部时,在这种情况下传递空列表并在进行查询时只输入这个条件。
if (outletList.size()==0) {
// case for all
} else {
// do regular stuff
}
推荐阅读
- azure - 如何使用 azure 应用程序网关配置 ssl?
- c# - 下拉列表未显示数据库中的选定项
- python - 有没有办法循环回到 Python v3 中的前一行代码?
- python-3.x - 如何使用 Web3 访问受访问权限保护的智能合约功能?
- angular - 使用会话存储和服务文件未正确返回值
- asynchronous - 在带有承诺的操作中使用提交会返回“Getters & Setters”
- javascript - 使用电子和 node.js 应用程序在 easy-ftp 中的文件上传错误
- r - 嵌套循环或等效
- vuejs2 - 如何在没有按钮或链接的页面加载时触发 Bootstrap-vue 模式?
- python - 需要写一个if语句,根据用户输入的总KG来判断需要多少个50KG和10KG包