Valor já preenchido ou pré-enchido :)

Olá pessoal,

Sou novo no Struts e tenho uma dúvida:

Como faço para um campo texto já aparecer preenchido na primeira vez que abrir a página. Fiz uma Action que roda antes do jsp e que coloca a String IdNota que eu preciso como atributo da sessão:

session.setAttribute("idNota", idNota);

No início do jsp fiz referencia ao meu bean:

<jsp:useBean id="notaform" scope="request" class="bank.NotaForm" />

e no form, o campo que desejo que já seja preenchido pelo valor:

<html:form action="/printNota.do" method="post" > <html:text property="idNota" name="notaForm" size="6"/>

tudo roda sem erros mas não sei como fazer para setar o valor desse campo com o valor passado pela Action…acredito que seja com o atributo value=<algumacoisa>.

Obrigado desde já!

Pestana

No seu caso, creio que seja melhor colocar o valor no request do que na sessão.

Não precisa usar o <jsp:useBean …/>.

E tenta assim:

Action:

request.setAttribute("nota", nota);

No JSP:

&lt;html:form action="...."&gt; &lt;html:text name="nota" property="idNota" /&gt; &lt;/html:form&gt;

Falou!

Daniel,

ok, tirei o <jsp:useBean …/>

Na action deixei:

request.setAttribute("id", id);

No JSP:

&lt;html:form action="...."&gt; &lt;html:text name="id" property="idNota" /&gt; &lt;/html:form&gt;

Mas aí vem a mensagem:

javax.servlet.ServletException: Cannot find bean id in any scope

Não sei se expliquei muito bem…

Eu chamo primeiro uma Action para pegar o valor do último id de notas emitidas que está gravado no banco (isso eu sei q ela faz, ela pega o último id e joga no console para debugar) e passo esse valor para o campo já vir preenchido no formulário.

E agora?

Pestana

Tenta:

<bean:write name=“id” property=“idNota” />

hum… :cry:

mesma coisa:

javax.servlet.ServletException: Cannot find bean id in any scope

Pestana

weird!

E com isso:

<jsp:useBean id=“id” class=“bank.NotaForm” />
<jsp:getProperty id=“id” property=“idNota” />

bom,

legal, agora o que eu mudei:

[code]<jsp:useBean id=“id” class=“bank.NotaForm” />

<html:form action="/printNota.do" method=“post” >
<html:text property=“idNota” name=“id” >
</html:form>
[/code]

Mas o campo vem com valor 0…

Com <jsp:getProperty name=“id” property=“idNota” /> tb fica zerado o valor do campo…

Pestana

Então o valor não está sendo colocado no request.
Seu action não deve estar sendo chamado.

olha, dei uma verificada e realmente com request, não passa nada para o form…então resolví mudar para session como tinha feito inicialmente. Verifiquei que se eu fizer isso:

&lt;%=session.getAttribute("id")%&gt;

obtenho o resultado esperado mas gostaria de não usar scriptlets.

Não funciona com:

&lt;html:text property="idNota" name="id"&gt;

tenho que mexer no struts-config.xml?

Pestana

Veja se no seu struts-config.xml, na configuração do seu action tem algo que fala do request. Uma vez tive problemas com isso. Tem um atributo que não repassa o conteúdo do request.

Nada feito… alguém tem alguma idéia?

Estava vendo em alguns sites que vc pode usar uma subtag da tag <action> chamada <set-property> mas não sei se tem a ver… estou com struts 1.1

Qualquer ajuda é bem-vinda…

Pestana

Coloca aqui a configuração do seu struts-config.xml.

[code]

	<form-bean name="notaForm" type="org.apache.struts.action.DynaActionForm">
	            <form-property name="idNota" type="java.lang.String"/>
	            <form-property name="natureza" type="java.lang.String"/>
	            <form-property name="cfop" type="java.lang.String"/>
	            <form-property name="tipoEntradaSaida" type="java.lang.String"/>
	           
	            <form-property name="razaoSocial" type="java.lang.String"/>
	            <form-property name="endereco" type="java.lang.String"/>
	            <form-property name="cgc" type="java.lang.String"/>
	            <form-property name="dtEmissao" type="java.lang.String"/>
	            <form-property name="dtSaida" type="java.lang.String"/>
	            <form-property name="municipio" type="java.lang.String"/>
	            <form-property name="telefone" type="java.lang.String"/>
	            <form-property name="uf" type="java.lang.String"/>
	            <form-property name="ie" type="java.lang.String"/>
	            <form-property name="irrf" type="java.lang.Double"/>
	            <form-property name="cofins" type="java.lang.String"/>
	            <form-property name="issCalc" type="java.lang.Boolean"/>
	            <form-property name="inssCalc" type="java.lang.Boolean"/>
	            <form-property name="irrfCalc" type="java.lang.Boolean"/>
	            <form-property name="numFatura" type="java.lang.String"/>
	            <form-property name="vencFatura" type="java.lang.String"/>
	            <form-property name="valorFatura" type="java.lang.Double"/>
	            <form-property name="numFatura2" type="java.lang.String"/>
	            <form-property name="vencFatura2" type="java.lang.String"/>
	            <form-property name="valorFatura2" type="java.lang.Double"/>
	            <form-property name="totalNota" type="java.lang.Double"/>
	            
	            <form-property name="itemProd1" type="java.lang.Double"/>
	            <form-property name="itemProd2" type="java.lang.Double"/>
	            <form-property name="itemProd3" type="java.lang.Double"/>
	            <form-property name="descProd1" type="java.lang.Double"/>
	            <form-property name="descProd2" type="java.lang.Double"/>
	            <form-property name="descProd3" type="java.lang.Double"/>
	            <form-property name="valorProd1" type="java.lang.Double"/>
	            <form-property name="valorProd2" type="java.lang.Double"/>
	            <form-property name="valorProd3" type="java.lang.Double"/>

	            <form-property name="itemServ1" type="java.lang.Double"/>
	            <form-property name="itemServ2" type="java.lang.Double"/>
	            <form-property name="itemServ3" type="java.lang.Double"/>
	            <form-property name="descServ1" type="java.lang.Double"/>
	            <form-property name="descServ2" type="java.lang.Double"/>
	            <form-property name="descServ3" type="java.lang.Double"/>
	            <form-property name="valorServ1" type="java.lang.Double"/>
	            <form-property name="valorServ2" type="java.lang.Double"/>
	            <form-property name="valorServ3" type="java.lang.Double"/>
	            
	            <form-property name="pgto" type="java.lang.Integer"/>
	            <form-property name="iss" type="java.lang.Integer"/>

	</form-bean>
		<action path="/printNota"      type="bank.NotaAction"
			name="notaForm"
			scope="request"
			validate="true"
			input="/pages/nota.jsp">
			<forward name="success" path="/pages/success.jsp"/>		
		</action>

       <!-- "nota" action -->

		<action path="/pages/Nota"      type="bank.Nota"
			
			validate="true">
			
			<forward name="init" path="/pages/nota.jsp"/>
					
		</action>
    

</action-mappings>


<controller

   processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>



<message-resources parameter="MessageResources"/>

[/code]

Parece normal. Que estranho!
Você está chamando diretamento o seu JSP ou o .do?

André,

Eu acho q vc tah fazendo uma confusãozinha na hora de passar o objeto pro request…

O lance eh o seguinte…
Sua action deve ser chamada antes da jsp…feito isso a sua action vai criar um objeto do tipo bank.NotaForm e atribuir esse objeto como um atributo da requisição…(pelo amor de Deus não use sessao cara! soh qdo for realmente necessario…), mais ou menos assim…

NotaForm nota = ...;//Consulto, seto, etc, etc...

...
request.setAttribute("nota", nota);

Depois disso, em sua jsp vc obterah os dados do bean da maneira q vc estava fazendo:

&lt;form action="/printNota.do"  method="post"&gt;
	&lt;html:text property="idNota" name="nota"/&gt;
&lt;/html:form&gt;

(Presumindo q o objeto nota tenha uma propriedade chamada idNota…)

Mas se ainda assim a propriedade estiver vindo zerada, pode olhar q vc não estah setando a propriedade idNota do seu bean, ou estah setando-a com 0.

Resolvido: :smiley:

Como estou começando com Struts, ainda faço confusão com algumas coisas. :lol:

Action

[code]package bank;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.LinkedList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import db.Conexao;

public class Nota extends Action {
private String idNota = null;
private Collection natureza = null;
private Collection empresas = null;
private String sql = “”;

    /* Metódo que invoca a camada de negócios.*/
    public ActionForward execute(ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response) throws Exception {
     
     Conexao c = new Conexao();
     Connection conn = null;
     ResultSet rs = null;
     HttpSession session = request.getSession();
     
     try 
     {
      conn = c.createConnection();
      Statement s = conn.createStatement();
      // pega o último id
      // para popular campo numero da nota
      selectIdNota(session, s, form);
 
      // pega o último id
      // para popular campo numero da nota
      selectNatureza(session, s);

      // pega o último id
      // para popular campo numero da nota
      selectEmpresas(session, s);	      
      
      
      
      
   s.close();
   
  }
  catch(SQLException e)
  {
   System.out.println(e.toString()); 
  }
  catch(NullPointerException e)
  {
   System.out.println(e.toString()); 
  }
  finally
  {
   c.closeConnection(conn);
  }
    
    
     return (mapping.findForward("init")); // nota.jsp
    }

  
    
private void selectIdNota(HttpSession session, Statement s, ActionForm form) throws SQLException {
	ResultSet rs;
	// select id nota
	sql = "select ID_NOTA from TB_NOTAS order by ID_NOTA" ;
	             
	System.out.println(sql);//mostra o q faz
	  
	rs = s.executeQuery(sql);
	  
	while(rs.next()){
	  	
		if(rs.isLast())
			idNota = rs.getString("ID_NOTA");
		  
	}
	System.out.println("\n   ID    =    "+idNota+"\n");
	  
	NotaForm notaForm = (NotaForm)form;
	
	System.out.println("\npassou\n");
	//Aqui carrega o atributo do formulario
	notaForm.setIdNota(idNota);
	System.out.println("\npassou 2\n");
	System.out.println(notaForm.getIdNota()+"\n");
	  
  
 }
 	

 private void selectNatureza(HttpSession session, Statement s) throws SQLException {
	ResultSet rs;
  	// select id nota
  	sql = "SELECT ID_NATUREZA_OPERACAO, DESCRICAO FROM TB_NATUREZA_OPERACAO "; 

             
  	System.out.println(sql);//mostra o q faz
  
  	rs = s.executeQuery(sql);
  	
  	natureza = new LinkedList(); 

  	while(rs.next()){
  		
  		natureza.add(new NaturezaBean(rs.getString("ID_NATUREZA_OPERACAO"), rs.getString("DESCRICAO"))) ;
	  
  	}

  	session.setAttribute("natureza", natureza);
  	
 }

 private void selectEmpresas(HttpSession session, Statement s) throws SQLException {
	ResultSet rs;
  	// select id nota
  	sql = "select RAZAO_SOCIAL,ID_CLIENTE from TB_CLIENTES" ;

  	System.out.println(sql);//mostra o q faz
  
  	rs = s.executeQuery(sql);
  	
  	empresas = new LinkedList();
  	
  	while(rs.next()){
  		
  		empresas.add(new EmpresaBean(rs.getString("RAZAO_SOCIAL"),rs.getString("ID_CLIENTE"))) ;
	  
  	}
	
  	session.setAttribute("empresas", empresas);
  	
 }

} [/code]

struts-conf.xml

[code] <form-beans>

	&lt;form-bean name="notaForm" type="bank.NotaForm"&gt;
	            &lt;form-property name="idNota" type="java.lang.String"/&gt;
	            &lt;form-property name="natureza" type="java.lang.String"/&gt;
	            &lt;form-property name="cfop" type="java.lang.String"/&gt;
	...
	&lt;/form-bean&gt;
&lt;/form-beans&gt;

&lt;action-mappings&gt;
	    &lt;action path="/pages/Nota"
	        type="bank.Nota"
	        name="notaForm" scope="request" validate="true"&gt;
	        &lt;forward name="init" path="/pages/nota.jsp"/&gt;
	    &lt;/action&gt;
&lt;/action-mappings&gt;[/code]

ActionForm

[code]package bank;

import org.apache.struts.action.ActionForm;

public class NotaForm extends ActionForm{
private String idNota;

public String getIdNota() {
return idNota;

public void setIdNota(String idNota) {
   this.idNota = idNota;
}

}[/code]

jsp:

&lt;html:form action="/printNota.do" method="post" &gt; &lt;html:text property="idNota" name="notaForm" &gt; &lt;/html:form&gt;

Coloquei só que importa… mas deu certo… vou mudar o atributo na session para request…

Obrigado, Diogenes e Daniel! :wink:

Pestana

Antes de mais nada, eu tb estou começando com o struts. Estou fazendo algo bem semelhante, ou seja, estou vinculando um elemento de um form com um bean da seguinte forma:

&lt;html:text name="usuarioeditar" property="login" /&gt;

O “usuarioeditar” é uma variável de sessão, e o text é preenchido com o valor do campo “login” de “usuarioeditar”. O problema é que quando altero o conteúdo do text e submeto o formulário, o bean não é alterado. Vcs saberiam me dizer o q estou fazendo errado?

Valeu!

Auto-quote eh sacanagem! :smiley:

e outra…

Quando for obter o valor de uma variavel na action do seu form obtenha-o pelo ActionForm passado pro metodo execute…

Cara, em primeiro lugar,obrigado por responder.

Perguntas:

  1. O que é auto-quote? Qual é a sacanagem disto? :shock:

  2. Gostaria de não usar variáveis de sessão, mas o caso é que quando eu atribuo alguma coisa à um request, esta coisa é perdida ao fim do request, certo? O que eu quero é criar um VO lá no DAO e carregá-lo no JSP. Como fazer isto sem variáveis de sessão? :shock:

  3. Estou tentando recuperar o bean alterado no validate() do ActionForm, e não no execute() do Action. Ok, isto é quase a mesma coisa, eu sei. Acontece que o ActionForm não tem nem as variáveis membro que são alteradas, elas estão todas no bean que está associado às tags html:... no jsp. Pq isto simplesmente não funciona, ou seja, pq as alterações as alteraçõe nos controle html não se refletem no bean q está associado a eles? :shock:

Valeu, again! 8)

Entaum vamos lá…

Disponha! :smiley:

É que no post anterior eu citei eu mesmo… :wink:

Vc quer apenas criar um VO no DAO e mandar pra jsp?

Fácil!

 UsuarioVO usuario = usuarioDao.getMeuUsuarioVO(); //Obtem o objeto do DAO
 ...

 request.setAttribute("usuarioeditar", usuario);

E na jsp:

&lt;html:text name="usuarioeditar" property="login" /&gt;

Se vc tem seu ActionForm vinculado a Action no struts-config normalmente,
qdo eh dado o post pra Action o ActionForm será populado com os dados
preenchidos no formulário cara!
É soh vc obter os dados pelos campos do próprio ActionForm…

Como vc tah fazendo no seu ActionForm? Posta ele aih…