2014-09-05 41 views
0

我對Java和JSP沒有經驗。我創建了一個表單,它按照它應該的方式工作,但是我希望獲得一些樂趣,並在表單提交後重新排序結果。我會加入一些圖片來展示我的意思。我很難找到我想要的東西,並且不知道從哪裏開始。任何幫助將不勝感激。使用Java/JSP重新排序表單結果

這裏是表單頁面: enter image description here

下面是結果:
enter image description here

這是我想要的結果看起來像(公告「最後」雲從2到3,'中間」從3至5中, '項目' 爲4至2,且 '地址' 從5到4): enter image description here

Java文件

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.util.*; 

public class ShowParameters extends HttpServlet { 

    private static final long serialVersionUID = 1L; 

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 


     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     String docType = 
       "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + 
       "Transitional//EN\">\n"; 
     String title = "Reading All Request Parameters"; 

     out.println(docType + 
       "<HTML>\n" + 
       "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" + 
       "<BODY BGCOLOR=\"#FDF5E6\">\n" + 
       "<H1 ALIGN=CENTER>" + title + "</H1>\n" + 
       "<TABLE BORDER=1 ALIGN=CENTER>\n" + 
       "<TR BGCOLOR=\"#FFAD00\">\n" + 
       "<TH>Parameter Name<TH>Parameter Value(s)"); 

     Enumeration paramNames = request.getParameterNames(); 
     while(paramNames.hasMoreElements()) { 
      String paramName = (String)paramNames.nextElement(); 
      out.print("<TR><TD>" + paramName + "\n<TD>"); 
      String[] paramValues = 
        request.getParameterValues(paramName); 
      if (paramValues.length == 1) { 
       String paramValue = paramValues[0]; 
       if (paramValue.length() == 0) 
        out.println("<I>No Value</I>"); 
       else 
        out.println(paramValue); 
      } else { 
       out.println("<UL>"); 
       for(int i=0; i<paramValues.length; i++) { 
        out.println("<LI>" + paramValues[i]); 
       } 
       out.println("</UL>"); 
      } 
     } 

     out.println("</TABLE>\n</BODY></HTML>"); 
    } 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     System.out.println("STOP1\n"); 
     doGet(request, response); 
    } 

} 

JSP文件

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Lab 3</title> 
<style type="text/css"> 
.address { 
height: 50px; 
} 
</style> 
</head> 
<body> 

<body BGCOLOR="#FF0000"> 

<h1 align="center">Basic FORM</h1> 
<form action="ShowParameters" method="post"> 
    First Name: <input type="text" name="first"> <br> 
    Last Name: <input type="text" name="last" value="$"> <hr/> 
    Middle Name: <input type="text" name="middle"> <br> 
    Item: <input type="text" name="item"> <br> 
    Address: <input type="text" name="address" class="address"> <br> 
    Credit Card: <br> 
    <input type="radio" name="cardType" value="Visa">Visa <br> 
    <input type="radio" name="cardType" value="MasterCard">MasterCard <br> 
    Credit Card Number: <input type="text" name="cardNum"> <br><br> 

    <center><input type="submit" value="Submit Order"></center> 
</form> 

</body> 
</html> 

回答

1

,而不是在servlet的創建HTML創建一個類來保存表單輸入信息,如:

public class Person { 

    private String firstName; 
    private String midlleName; 
    private String lastName; 
    private String item; 
    private String address; 
    private String cardType; 
    private String cardNumber; 

    //getters and setters 

} 

在servlet的創建Person類的實例,並設置值,則只需添加人實例請求,並轉發給JSP。

<table border="2"> 
    <tr bgcolor="#FFAD00"> 
     <th>Parameter Name</th> 
     <th>Parameter Value(s)</th>  
    </tr> 
    <tr> 
     <td>first</td><td>${person.firstName}</td> 
    </tr> 
    <tr> 
     <td>item</td><td>${person.item}</td> 
    </tr> 
    <tr> 
     <td>last</td><td>${person.midlleName}</td> 
    </tr> 
    <tr> 
     <td>address</td><td>${person.address}</td> 
    </tr> 
    <tr> 
     <td>middle</td><td>${person.lastName}</td> 
    </tr> 
    <tr> 
     <td>cardType</td><td>${person.cardType}</td> 
    </tr> 
    <tr> 
     <td>cardNum</td><td>${person.cardNumber}</td> 
    </tr> 
</table> 

優點::

  • 容易,因爲你在HTML想改變順序(只需移動<tr/>元素)
  • 無需

    Person person = new Person(); 
        person.setFirstName(request.getParameter("first")); 
        //set other person values here 
        request.setAttribute("person", person); 
        request.getRequestDispatcher("filename.jsp").forward(request, response); 
    
    在jsp中顯示像

    的循環。

  • 遵循面向對象編程(OOP)編程風格。
1

而不是由request.getParameterNames獲取參數的枚舉,你可以有你想要的順序與他們所期望的所有參數名的字符串數組,你可以循環通過數組像這樣:

String[] paramNames = { "item", "last", "first" }; 
for(int i=0; i<paramNames.length; i++) 
{ 
    out.print("<tr>"); 
    out.print("<td>" + paramNames[i] + "</td>"); 
    out.print("<td>"); 
    String[] paramValues = request.getParameterValues(paramNames[i]); 
    ... 
    ... 
    out.print("</td>"); 
    out.print("</tr>"); 
} 

請大家注意,你是不是在你的代碼做的事情之一正確關閉細胞</td></tr>行。您應該真的關閉與</li> LI。

+0

那麼我會刪除哪些代碼?只是說「Enumeration paramNames = request.getParameterNames();」的行?或者我應該在該行之後立即刪除while循環? – Brett 2014-09-05 19:47:27

+0

另外,我應該用什麼來替換「...」這兩行? – Brett 2014-09-05 19:51:25