httpservlet запрос getparameter непроверенных и проверенных флажков в Java
В моей форме есть несколько флажков (около 15), и проблема в том, что имена флажков появляются в перечислении только в том случае, если они отмечены, но я хочу, чтобы все они возвращались, чтобы при печати данных будет иметь имя флажка и сказать "проверено" или "не проверено". Я думал об одном способе, которым я мог бы просто вручную установить флаг, чтобы увидеть, что присутствует, а что нет, но это не кажется удаленно эффективным.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
try
{
FileWriter writer = new FileWriter("OrderFormData.csv");
writer.append("FieldName");
writer.append(',');
writer.append("Value");
writer.append('\n');
@SuppressWarnings("unchecked")
Enumeration <String> paramNames = request.getParameterNames();
while(paramNames.hasMoreElements())
{
String paramName = (String)paramNames.nextElement();
writer.append(paramName);
writer.append(',');
String[] paramValues = request.getParameterValues(paramName);
if (paramValues.length == 1)
{
String paramValue = paramValues[0];
if (paramValue.length() == 0)
{
writer.append("No Value");
writer.append('\n');
}
else
{
writer.append(paramValue);
writer.append('\n');
}
}
else
{
for(int i = 0; i<paramValues.length; i++)
{
writer.append(paramValues[i]);
writer.append(',');
}
writer.append('\n');
}
}
writer.flush();
writer.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
4 ответа
Вы должны подумать об обходном пути, потому что, как сказал @Alex, непроверенные флажки не являются частью запроса.
Это всего лишь идея, но, например:
<input type="hidden" name="checkboxNamesList" value="nameCheckbox1" />
<input type="hidden" name="checkboxNamesList" value="nameCheckbox2" />
<input type="hidden" name="checkboxNamesList" value="nameCheckbox3" />
<input type="hidden" name="checkboxNamesList" value="nameCheckbox4" />
Тогда вы можете получить checkboxNamesList
из запроса (это будет строка []), так что вы будете иметь все имена флажков параметров. Если вы получаете параметр для одного из флажков name, а значение равно null, это означает, что флажок не был установлен.
Отредактировано: уточнение
Что ж, поскольку в запросе нет флажков, вы не знаете, чьи флажки в JSP не были проверены, но вам нужно знать их, чтобы записать в файл данных что-то вроде checkbox_name1=unchecked.
Итак, как это сделать? Во-первых, вам нужно знать, какие флажки (не отмечены или нет) присутствовали в запросе. Для этого вы можете использовать код ниже и получить имя всех флажков, присутствующих в JSP:
String[] checkboxNamesList= request.getParameterValues("checkboxNamesList");
Затем, давайте поищем непроверенные чекбоксы:
for (int i = 0; i < checkboxNamesList.length; i++) {
String myCheckBoxValue = request.getParameterValues(checkboxNamesList[i]);
// if null, it means checkbox is not in request, so unchecked
if (myCheckBoxValue == null)
writer.append(checkboxNamesList[i] + "=unchecked");
// if is there, it means checkbox checked
else
writer.append(checkboxNamesList[i] + "=checked");
}
Вы можете использовать скрытые поля вместе с флажками. Перебирайте их и проверяйте наличие флажка выбора.
<input type="checkbox" name="fruit" value="Apple" />
<input type="hidden" name="fruit_option" value="Apple" />
<input type="checkbox" name="fruit" value="Orange" />
<input type="hidden" name="fruit_option" value="Orange" />
А на стороне сервера сделайте что-то вроде этого:
Enumeration<String> paramNames = req.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = paramNames.nextElement();
if (!paramName.endsWith("_option")) continue; // Skip checkboxes. Only process hidden fields
String [] options = req.getParameterValues(paramName); // All options
String [] selections = req.getParameterValues(paramName.replace("_option", "")); // Real checkboxes
List <String> selectionList = Arrays.asList(selections); // Easier to work with
// Iterate through checkbox group options
for (String o : options) {
boolean contains = selectionList.contains(o);
// Do something with it. Write yes/no to file for example...
}
}
Снятые флажки не будут частью запроса: см. http://www.w3.org/TR/REC-html40/interact/forms.html
Создать скрытые поля как
<input type="checkbox" name="checkbox" checked/>
<input type="hidden" name="checkbox" checked />
Теперь в вашем сервлете есть: String[] names = request.getParameterValues ("checkbox");
PrintWriter pw = new PrintWriter(new File("/Desktop/sticker.txt"));
for(int i=0; i < names.length; i++) {
if(i + 1 < names.length && names[i].equals(names[i+1])) {
pw.write(names[i] + ",true\n");
++i;
} else {
pw.write(names[i]+",false\n");
}
}
pw.close();