2014-02-09 3 views
0

У меня есть страница в jsp, где я динамически показываю записи из базы данных в таблице с генерируемыми динамическими строками. В каждой строке есть переключатель, чтобы пользователь мог выбрать одну строку.получить значение выбранной динамической строки таблицы в jsp

Код для Page1.jsp является:

<form action="page2.jsp" method="post"> 

<table> 
<% 
try { 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb,  *.accdb)};DBQ=C:/Users/hp/Documents/Sample1.accdb"; 

Connection con = DriverManager.getConnection(database, "", ""); 
Statement stmnt = con.createStatement(); 

String source=request.getParameter("from"); 
String dest=request.getParameter("to") 
ResultSet resultset = stmnt.executeQuery("select * from Trains123 where From='" +source+ "' and To='" +dest+ "' "); 

    while(resultset.next()) 
    {   
     %>   

<tr> 

<td><% out.println(resultset.getString("From")); %></td> 
<td><% out.println(resultset.getString("To")); %></td> 
<td><% out.println(resultset.getString("TrainName")); %></td>   


<td><input type="radio" name="TName" value="<%= resultset.getString("TrainName")%>">book</td> 
</tr> 
</table> 
</form> 

и код на Page2.jsp является:

<% out.println(request.getParameter("Tname")); %> 

Там нет никаких проблем с набором записей, значения становятся распечатаны. но радиокнопка не отображается. Также, если в наборе записей есть 2 записи, только первая печатается без переключателя. Я отлаживал файл, управление останавливается на линии радиокнопки.

Я понятия не имею, где ошибка и в чем проблема с динамическим значением переключателя. Все, что я хочу сделать, это узнать строку, выбранную пользователем.

ответ

0

Спецификация AFAIR JDBC не дает гарантии, что вы можете позвонить getXxx в результирующий набор с тем же именем/номером колонки. Большинство драйверов JDBC поддерживают его, но некоторые могут и не быть уверенным, что ODBC, вероятно, не является исключением. Таким образом, первые пытаются получить значения всех столбцов в строке на дополнительные переменные, как это:

String from = resultset.getString("From"); 
String to = resultset.getString("To"); 
String trainName = resultset.getString("TrainName"); 

и использовать его таким образом:

<tr><td><%=form%></td> 
    <td><%=to%></td> 
    <td><%=trainName%></td> 
    <td><input type="radio" name="TName" value="<%=trainName%>"/> book</td> 
</tr> 

Кроме того, пожалуйста, избежать этих значений, как если trainName будет содержат символ '"', вы можете выйти из HTML-кода.

Но гораздо важнее то, как вы написали свой код. Прежде всего, вы должны отделить уровень представления (JSP) от кода. Таким образом, вы должны создать класс, который считывает список поездов и просто положить его в запрос, более или менее, как это:

public class RailLink { 
    public String from; 
    public String to; 
    public String trainName; 
} 

public class Trains { 

    private Connection getConnection() { 
     //- This code actually should be put somewhere else. 
//   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
//   String db = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/hp/Documents/Sample1.accdb"; 
//   Connection cn = DriverManager.getConnection(db, "", ""); 
      return cn; 
    } 

    public static List<RailLink> findLinks(String from, String to) { 
     assert from != null && to != null; 
     List<RailLinks> links = new LinkedList<>(); 
     try (
      Connection cn = getConnection(); 
      PreparedStatement ps = cn.prepareStatement("SELECT * FROM Trains123 WHERE \"From\" = ? AND \"To\" = ?"); 
     ) { 
      ps.setString(1, from); 
      ps.setString(2, to); 
      try (ResultSet rs = ps.executeQuery()) { 
       while (rs.next()) { 
        RailLink link = new RailLink(); 
        link.from = rs.getString("From"); 
        link.to = rs.getString("To"); 
        link.trainName = rs.getString("TrainName"); 
        links.add(link); 
       } 
      } 
     } 
     return links; 
    } 
} 

Теперь написать сервлет, который обрабатывает вашу форму:

public class FindLinks extends HttpServlet { 

    public void doGet(HttpServletRequest request, HttpServletResponse respone) { 
     List<RailLink> links = Trains.findLinks(request.getParameter("from"), request.getParameter("to")); 
     request.setAttribute("rail-links", links); 
     request.getRequestDispatcher("page1.jsp").forward(request, response); 
    } 
} 

И, наконец, измените свою страницу1.jsp as:

<%@page ...%> 
... 
<% List<RailLink> links = request.getAttribute("rail-links"); 
    if (links != null) {%> 
     <table><% 
     for (RailLink l : links) {%> 
      <tr><td><%=l.from%></td> 
       <td><%=l.to%></td> 
       <td><%=l.trainName%></td> 
       <td><input type="radio" name="TName" value="<%=l.trainNam%"/> book</td> 
     <%}%> 
     </table><% 
    } 
    else {%> 
     <p>No connections found.</p><% 
    }%> 

Удачи в этом.

+0

Я пробовал этот метод, а <%=form%> <%=to%> <% = trainName%> <тип = "радио" имя = значение "TName" вход = "<% = trainName%> "/> book но не работает. везде, где я пытаюсь ввести код на стороне сервера, он не работает. – Seema

+0

Можете ли вы предоставить некоторые журналы ошибок? – Cromax

+0

У меня нет ошибок. Я просто пуст. Нет ошибки Im очень новый для java, я только что узнал jsp, извините, я не знаю о сервлетах и ​​всех. есть ли способ решить его, используя только jsp? – Seema

Смежные вопросы