2015-06-30 4 views
0

Из того, что я вижу, когда страница флажка передает параметры на страницу Proto, которая помещает ее в объект портфеля, который затем используется для проверки значения данных и отображения имени портфеля, и когда прото-страница обновляет параметры arent, которые снова передаются с страницы флажка, а объект портфеля имеет нулевое значение, хранящееся в нем, которое дает исключение нулевого указателя.Ошибка при обновлении страницы JSP

, так что если я сохраню значения параметров, как только они уже пройдены с этой страницы, это решит проблему? И если да, то как я могу это сделать?

Вот код для прото страницы

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ page import="java.io.*"%> 
<%@ page import="java.sql.*"%> 
<%@ page import="java.util.*"%> 
<%@ page import="oracle.jdbc.pool.OracleDataSource"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 

<head> 
<title>Live Data Tracking</title> 
<style type='text/css'> 
.wrapper { 
margin: 0px auto; 
width: 1379px; 
background-color: #cccccc 
} 

.header { 
float: left; 
width: 100%; 
background-color: #356aa0 
} 

.left1 { 
float: left; 
margin-right: 10px; 
width: 338px; 
background-color: #ffffff 
} 

.left2 { 
float: left; 
margin-right: 10px; 
width: 337px; 
background-color: #ffffff 
} 

.left3 { 
float: left; 
margin-right: 10px; 
width: 337px; 
background-color: #ffffff 
} 

.right { 
float: right; 
width: 337px; 
background-color: #ffffff 
} 

.footer { 
float: left; 
width: 100%; 
background-color: #00457b 
} 

body { 
padding: 0px; 
margin: 0px; 
font-size: 90%; 
background-color: #e7e7de 
} 
</style> 

</head> 


<script type="text/javascript"> 

<% 
ArrayList<ArrayList<String>> testList = new ArrayList(); 
portfolio = request.getParameterValues("portfolio"); 


try{ 

OracleDataSource ds= new OracleDataSource(); 
//javax.sql.DataSource ds = new javax.sql.DataSource(); 
ds.setDriverType("thin"); 
ds.setServerName("localhost"); 
ds.setPortNumber(1521); 
ds.setDatabaseName("orcl"); 
ds.setUser("system"); 
ds.setPassword("amex1234"); 
Connection connection = ds.getConnection(); 
System.out.println("Connected Successfully"); 


     Statement statement = connection.createStatement() ; 
     if (portfolio!=null) 
     { 
      for(int i=0;i<portfolio.length;i++) 
       testList.add(new ArrayList()); 
      //System.out.println(testList); 

      for(int i=0; i<portfolio.length;i++)  
      { String temp=""; 
       ResultSet resultset = statement.executeQuery("select num FROM "+portfolio[i]+"_Test") ; //Put in SQl command and Table name here 
      while(resultset.next()){ 

       temp = resultset.getString(1); 
       testList.get(i).add(temp);  
      } 


       //System.out.println(testList); 
      } 

     } 

} catch(SQLException e) { 
    e.printStackTrace(); 
} 
    %> 

</script> 

<body> 

<%! String[] portfolio; %> 
<div class="wrapper"> 
    <div class="header"> 
     <center> 
      <h4>Live Tracker</h4> 
     </center> 
    </div> 
    <div class="left1"> 
     <h3>Portfolio</h3> 
     <% 
    if (portfolio != null) 
    { 
    for (int i = 0; i < portfolio.length; i++) //i=portfolio length proxy 
    { 
    out.println ("<b>"+portfolio[i]+"<b>"); %> 
     <br> 
     <% } 
    } 
    else out.println ("<b>none<b>"); 
    %> 
    </div> 
    <div class="left2"> 
     <h3>Pre-Stage</h3> 
    for (int j = 0; j < portfolio.length; j++) 
    {  
    response.setIntHeader("Refresh", 2); 
    //System.out.println(testList.get(j).size()); 
    if (testList.get(j).size()!=0){ %> 
     Data is there <br> 
     <% } else { %> 
     No data <br> 
     <% } 
     }%> 
    </div> 
    <div class="left3"> 
     <h3>Stage</h3> 
    </div> 
    <div class="right"> 
     <h3>Mirror</h3> 
    </div> 
    <div class="footer">Something Funny and Witty Here</div> 
</div> 
</body> 
</HTML> 

Это код страницы флажок. Запуск через эту страницу

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

<HTML> 
<body> 
<FORM method="POST" ACTION="Proto_1.jsp"> 
<center> 
Select your portfolio(s): <br><br> 
<table> 
<tr> 
<td> 

    <input TYPE=checkbox name=portfolio VALUE=X> 
</td>  
<td>  
    X 
</td> 
</tr> 

<tr> 
<td> 
    <input TYPE=checkbox name=portfolio VALUE=Y> 
</td>  
<td>  
    Y 
</td> 
</tr> 

<tr> 
<td> 
    <input TYPE=checkbox name=portfolio VALUE=W> 
</td>  

<td>  
    W 
</td> 
</tr> 

<tr> 
<td> 
    <input TYPE=checkbox name=portfolio VALUE=V> 
</td>  

<td>  
    V 
</td> 
</tr> 

<tr> 
<td> 
    <input TYPE=checkbox name=portfolio VALUE=S> 
</td>  

<td>  
    S 
</td> 
</tr> 
</table> 
<br> <INPUT TYPE=submit name=submit Value="Submit"> 
</center> 
</FORM> 
</BODY> 
</HTML> 
+0

Зачем вам нужна автозагрузка? – Arvind

+0

Нужно отслеживать изменения, сделанные в базе данных – user3481478

+0

Почему бы не использовать ajax? – Arvind

ответ

1

Существует несколько вариантов решения.

Вариант 1: Установите параметры в сеанс. Вместо того, чтобы:

portfolio = request.getParameterValues("portfolio"); 

Попробуйте это:

String[] portfolio = null; 
if(null == request.getParameter("submit")) { //page reload, true 
    portfolio = (String[])session.getAttribute("portfolio"); 
} else { 
    portfolio = request.getParameterValues("portfolio"); 
    session.setAttribute("portfolio", portfolio); 
} 

Вариант 2: Отделить вид и бизнес-логики, т.е. разделить страницу на две части. Сначала jsp получит запрос portfolio и сделайте частый вызов, чтобы получить обновленные записи со второго jsp. Для этого подхода требуется JavaScript.

View.jsp: Сделать вызов Records.jsp часто используя setInterval()

<script> 
var getRecords = function() { 
    // to do here 
}; 

setInterval(getRecords, 2 * 1000); (in miliseconds)[every 2 sec] 
</script> 

Records.jsp: Сформировать динамический HTML вместе с записями

+0

Реализована первая опция. Оно работает. Большое спасибо человеку: D – user3481478

0

Вы можете сохранить данные флажок, чтобы сеанс через session.setAttribute («портфолио», портфолио). Вы можете получить это и установить значение обратно на страницу с помощью document.getElementById (id) .value или через значение = {$ sessionVariable} в jsp

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