Escopo de um objeto num JSP

tenho o seguinte codigo:

<% int tamanho = 0; DisciplinaDao dDao = new DisciplinaDao(); ResultSet rs = dDao.getDisciplinas(); while (rs.next()) { tamanho = tamanho + 1; } %>

logo a seguir tento usar o rs fazendo o seguinte:

<%
while (rs.next()) {
%>
<option value="<%=rs.getString("nome")%>"><%=rs.getString"nome")%>
</option>
<%
}
%>

ai ele nao escreve nada no value ... pq ? 
 

Olá

Por que voce esta tentando percorrer o rs 2 vezes.Na segunda ele já esta no fim, dai o metodo next() retorna false.
A ideia é voce fazer um while só.

Use o método rs.first(); antes de executar o loop pela segunda vez.
Desse jeito o cursor volta para a primeira linha do ResultSet.

Espero ter ajudado !!!

o problema real é q como é necessário fazer uma conexao com o banco p/ q os dados sejam mostrados no JSP , logo ao entrar na página ja existe uma conexao e esta pelo meu entendimento nao pode ser fechada

conn.close por se tratar de um SELECT, estou correto ? Daí toda vez que o usuario entra na pagina ele faz uma nova conexao e isso acaba resultando no seguinte erro:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
The Connection descriptor used by the client was:
localhost:3456:bancodedados

[quote=pelegrini]Use o método rs.first(); antes de executar o loop pela segunda vez.
Desse jeito o cursor volta para a primeira linha do ResultSet.

Espero ter ajudado !!!
[/quote]

tá dando o seguinte erro agora:

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: Exception in JSP: /cadastroDisciplina.jsp:91

88: 				&lt;%
89: 					//rs = dDao.getDisciplinas();
90: 				
91: 					rs.first();
92: 					while (rs.next()) {
93: 				%&gt;
94: 				&lt;option value="&lt;%=rs.getString("nome")%&gt;&quot;&gt&lt;%=rs.getString("nome")%&gt;


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

javax.servlet.ServletException: Operação inválida para encaminhar apenas conjunto de resultados: first
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
	org.apache.jsp.cadastroDisciplina_jsp._jspService(cadastroDisciplina_jsp.java:209)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

java.sql.SQLException: Operação inválida para encaminhar apenas conjunto de resultados: first
	oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	oracle.jdbc.driver.BaseResultSet.first(BaseResultSet.java:74)
	org.apache.jsp.cadastroDisciplina_jsp._jspService(cadastroDisciplina_jsp.java:143)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.5.17

Ola Marcelo, tente fazer desse jeito, não sei se é assim que você esta fazendo.

&lt;%
 int tamanho = 0;
 DisciplinaDao dDao = new DisciplinaDao();
 ResultSet rs = dDao.getDisciplinas();
 while (rs.next()) {
 tamanho = tamanho + 1;
 }
 %&gt;

.
.
.

 &lt;%
 rs.first();  // AQUI QUE DEVE SER INSERIDO O rs.first()
 while (rs.next()) {
 %&gt;
 &lt;option value="&lt;%=rs.getString("nome")%&gt;&quot;&gt&lt;%=rs.getString"nome")%&gt;
 &lt;/option&gt;
 &lt;%
 }
 %&gt;

cara ! é exatamente desta forma q estou fazendo … :frowning: