Извлечение полей и значений


Следующий пример похож на приведенный ранее в разделе о сервлетах. При первом показе страницы она определяет, что у вас нет полей и возвращает страницу, содержащую форму с помощью того же самого кода, что и в примере с сервлетом, но в формате JSP. Когда вы отправляете форму с заполненными полями по тому же самому JSP URL'у, страница обнаруживает поля и отображает их. Это прелестная техника, поскольку она позволяет вам получить две страницы, одна из которых содержит форму для заполнения пользователем, а вторая содержит код ответа на эту страницу, в едином файле, таким образом, облегчается создание и поддержка.

//:! c15:jsp:DisplayFormData.jsp

<%-- Извлечение данных из HTML формы. --%>

<%-- Эта JSP также генерирует форму. --%>

<%@ page import="java.util.*"%>

<html>
<body>

<H1>DisplayFormData</H1>
<H3>
<%
    Enumeration flds = request.getParameterNames();
    if (!flds.hasMoreElements()) { // Нет полей
%>

<form method="POST" action="DisplayFormData.jsp">
<%
    for (int i = 0; i < 10; i++) {
%>
 
Field<%=i%>: <input type="text" size="20" name="Field<%=i%>" value="Value<%=i%>"><br>

<%
    }
%> 
<INPUT TYPE=submit name=submit value="Submit"></form>
<%
    }
    else {
        while (flds.hasMoreElements()) {
            String field = (String) flds.nextElement();
            String value = request.getParameter(field);
%>

<li><%=field%> = <%=value%></li>

<%
    }
    }
%>
</H3>
</body>
</html>

///:~

Более интересное свойство этого примера заключается в том, что он демонстрирует, как код скриплета может быть перемешан с HTML кодом даже в том месте, где генерируется HTML внутри Java цикла. Это особенно удобно для построения форм любого рода, в противном случае необходимо было бы вставлять повторяющийся HTML код.