#java #servlets
#java #сервлеты
Вопрос:
Вот HTML с моей страницы .jsp:
<tr>
<td><input type="checkbox" name=<%=editID%>COM /> </td>
<td>blah blah</td>
<td>blah blah</td>
</tr>
Итак, здесь пользователь установит флажки и отправит их на удаление. Но я хочу, чтобы они могли устанавливать несколько флажков. Например, если они установили два флажка, скажем, #s 5 и 6, он будет отображаться в сервлете как 5COM и 6COM (это связано с плохим дизайном таблицы). Итак, далее я пытаюсь получить несколько параметров со своей страницы jsp и записать их в свою базу данных в моем сервлете. Вот мои определения:
String[] comEdit = request.getParameterValues("editIDCom");
String comEditDel = "";
int[] comEditDels = null;
Итак, используя приведенный выше пример, массив comEdit должен содержать 5COM и 6COM …. Далее, я пытаюсь получить подстроку каждого элемента в массиве ‘comEdit’, а затем я пытаюсь поместить его в массив int:
for (int i = 0; i < comEdit.length; i) {
String com = comEdit[i];
comEditDel = com.substring(0, com.length() - 3);
comEditDels = new int[comEditDel == null ? 0: comEditDel.length];
comEditDels[i] = Integer.parseInt(comEditDel[i]);
}
Итак, придерживаясь того же примера, я пытаюсь создать новый массив int, который выдаст мне [5, 6] …. Теперь приведенная выше часть, скорее всего, неверна, но я попробовал, и вы можете видеть мои намерения. Здесь я пытаюсь использовать массив в моем вызываемом операторе:
CallableStatement stmt = null;
PreparedStatement pstmt = null;
Connection conn = null;
ArrayDescriptor ad = null;
String dSource = getServletContext().getInitParameter("dataSource");
stmt = conn.prepareCall("{?= call My_function(?)}");
stmt.registerOutParameter(1, Types.INTEGER);
ad = ArrayDescriptor.createDescriptor("NUM_ARRAY", conn);
stmt.setArray(2,new ARRAY(ad, conn, comeditDels));
Итак, опять же, используя пример, функция stmt.setArray должна отправить массив [5,6] в My_function . Опять это моя попытка, и она, вероятно, неверна? Приветствуется любая помощь. Спасибо!
Комментарии:
1. Я не слишком уверен, что ваши намерения ясны :). Каждая итерация по содержимому comEdit повторно инициализирует переменную
comEditDels
, что я не уверен, почему вы хотели бы сделать. ТакжеcomEditDel[i]
выдаст ошибку компиляции, поскольку aString
не поддерживает[]
.2. @laz, извини за это. Я в этом очень новичок. Я хочу использовать подстроку каждого элемента в массиве ‘comEdit’ и отправить ее в свою функцию, и я пытался сделать это через переменную comEditDels. Помогает ли это вообще?
3. Я тоже не могу толком понять, что вы пытаетесь сделать. Возможно, если бы вы опубликовали пример ожидаемых значений, как они должны обрабатываться и что вы хотели бы видеть записанным в БД, это могло бы помочь прояснить ситуацию — пошаговое руководство обычно полезно.
4. @laz, @no.good.at.coding, я обновил свой пост и попытался включить пошаговое руководство…. дайте мне знать, что вы думаете.
Ответ №1:
Основываясь на вашем ответе на мой комментарий, делает ли это то, что вы хотите?
String[] comEdit = request.getParameterValues("editIDCom");
int[] comEditDels = null;
if (comEdit != null) {
comEditDels = new int[comEdit.length];
for (int i = 0; i < comEdit.length; i) {
String com = comEdit[i];
if (com != null amp;amp; com.length() - 3 > 0) {
try {
comEditDels[i] = Integer.parseInt(com.substring(0, com.length() - 3));
} catch (NumberFormatException exception) {
// do something or possibly ignore since the value isn't a valid integer
}
}
}
}
if (comEditDels != null) {
CallableStatement stmt = null;
PreparedStatement pstmt = null;
Connection conn = null;
ArrayDescriptor ad = null;
String dSource = getServletContext().getInitParameter("dataSource");
stmt = conn.prepareCall("{?= call My_function(?,?,?,?)}");
stmt.registerOutParameter(1, Types.INTEGER);
ad = ArrayDescriptor.createDescriptor("NUM_ARRAY", conn);
stmt.setArray(2,new ARRAY(ad, conn, comEditDels));
}
Я не знаком с этими объектами Oracle, поэтому я не уверен, чего ожидать от передачи в ‘comEditDels’ таким образом, но я думаю, что это то, что вы хотите?
Комментарии:
1. Я думаю, что это близко …. я получаю нулевой указатель, потому что значение может быть нулевым, поступающим с моей страницы .jsp. Итак, как бы мне обернуть for stmt в if … else? if(comEdit != null) {for (int i = 0; i < comEdit.length; i) { String com = comEdit[i]; comEditDels[i] = Integer.parseInt(com.substring(0, com.length() — 3)); } else { comEditDel = -1;} Сработает ли это?
2. Видите, это компилируется просто отлично, но я все равно получаю указатель NULL в строке ‘int[] comEditDels = new int[comEdit.length];’ до н.э., если comEdit имеет значение null …. что возможно…. Я получаю нулевой указатель на эту строку кода.
3. Я пропустил перенос этого в проверку null. Упс!
4. Потрясающе, спасибо! Я, наконец, запустил его правильно. Я действительно ценю всю вашу помощь!