[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 

Forum Read-Only! Check the new site and forum here!

21) Como Fazer uma aplicação Action-CRUD com MentaBean ?  XML
Forum Index -> F.A.Q.
Author Message
Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 840
Location: Fortaleza-CE
Offline

Simples Action-CRUD de Notícias utilizando :

Mysql http://www.mysql.com
MentaBean http://www.mentaframework.org/mentabean.jsp
DI http://www.mentaframework.org/depinj.jsp
IOC http://www.mentaframework.org/ioc.jsp
ValidatorFilter http://www.mentaframework.org/validation.jsp
inputDate http://www.mentaframework.org/inputDate.jsp
formSkin http://forum.mentaframework.org/posts/list/1007.page
Pool http://www.mentaframework.org/connfilter.jsp
VOFilter http://www.mentaframework.org/voovfilters.jsp
ExceptionFilter http://forum.mentaframework.org/posts/list/1096.page
Formatters :
http://forum.mentaframework.org/posts/list/693.page
http://forum.mentaframework.org/posts/list/862.page
http://forum.mentaframework.org/posts/list/631.page
http://forum.mentaframework.org/posts/list/604.page
http://forum.mentaframework.org/posts/list/402.page
http://forum.mentaframework.org/posts/list/499.page
...

Bibliotecas em uso:
mentawai.jar
http://www.mentaframework.org/mentawai.jar
commons-dbcp-1.2.2.jar
http://jakarta.apache.org/site/downloads/downloads_commons-dbcp.cgi
commons-pool-1.3.jar
http://jakarta.apache.org/site/downloads/downloads_commons-pool.cgi
mysql-connector-java-3.1.12-bin.jar
http://www.mysql.com

No ApplicationManager:

Code:
 
 public class ApplicationManager extends org.mentawai.core.ApplicationManager {
 
     private ConnectionHandler connHandler;
     
     public void loadFormatters() {
         FormatterManager.addFormatter("dateFormatter", new DateFormatter("dd/MM/yyyy"));
     }
     
     public void init(Context application) {
     	
         //Lembre-se de alterar os parâmetros para o seu banco...
         final String driver = "com.mysql.jdbc.Driver";
         final String url = "jdbc:mysql://localhost/mentatest?autoReconnect=true";
         final String login = "root";
         final String pass  = "";
     	
         this.connHandler = new DBCPConnectionHandler(driver,url,login,pass);
         BasicDataSource ds = (BasicDataSource) ((DBCPConnectionHandler) connHandler)
         .getBasicDataSource();
         ds.setInitialSize(5);
         ds.setMaxIdle(5);
         ds.setMaxActive(20);
      
     }
     
     public void loadBeans() {
         
         bean(bean.Noticia.class, "Noticia")
   	    .pk("id","id",DBTypes.AUTOINCREMENT)
   	    .field("chamada", DBTypes.STRING)
   	    .field("texto", DBTypes.STRING)
   	    .field("lide", DBTypes.STRING)
   	    .field("data", DBTypes.DATE);
   		
     }
     
     public void loadActions() {
             
             filter(new ExceptionFilter());
 		
             on(EXCEPTION, fwd("/error.jsp"));
  
             filter(new IoCFilter());
 
             ioc("session",MySQLBeanSession.class);
  
             filter(new ConnectionFilter("connection", connHandler));
 
             filter(new ValidatorFilter());
 
             filter(new DIFilter());
 
             di("connection", Connection.class).source("connection"); 
 
             filter(new InjectionFilter());
 
             //Sim estou usando Super Tiny Style !
             action(NoticiaAction.class).fwdOk("/noticia.jsp");
     	    
             action(NoticiaAction.class,"add")
     	        .fwdOk("/noticia.jsp")
     	        .fwdError("/noticia.jsp")
     	        .filter(new VOFilter("noticia", Noticia.class));
             action(NoticiaAction.class,"del")
                 .fwdOk("/noticia.jsp")
                 .fwdError("/noticia.jsp");
             action(NoticiaAction.class,"updt")
                 .fwdOk("/noticia.jsp")
                 .fwdError("/noticia.jsp")
                 .filter(new VOFilter("noticia", Noticia.class));
     }
 }
 


Classe Noticia

Code:
 
 public class Noticia {
 	
     private int id;
     private String chamada;
     private String texto;
     //Lide é o primeiro parágrafo, que deve conter as principais
     //informações da matéria 
     //http://pt.wikipedia.org/wiki/Jornalismo
     private String lide;
     private Date data;
 
    public Noticia() {
    
    }
     
     public Noticia(int id) {
     	this.id = id;
     }
     
     //getters e setters
          
 }
 


Action

Code:
 
 public class NoticiaAction extends BaseAction implements Validatable {
 
     private BeanSession session;
 	
     public String execute() throws Exception {
         loadAll();
         return SUCCESS;
     }
 
     public String add() throws Exception {
         Noticia noticia = (Noticia)input.getValue("noticia");
         //Adiciono no formato que preciso.
         noticia.setData(input.getDate("data","dd/MM/yyyy"));
         session.insert(noticia);
         //Atualiza a lista após o insert...
         loadAll();
         return SUCCESS;
     }
 	
     public String load() throws Exception {
         Noticia noticia = new Noticia(input.getIntValue("id"));
         session.load(noticia);
         output.setValue("noticia", noticia);
         loadAll();
         return SUCCESS;
     }
     
     public String updt() throws Exception {
         Noticia noticia = (Noticia)input.getValue("noticia"); 
         session.update(noticia);
         loadAll();
         return SUCCESS;
     }
     
     public String del() throws Exception {
         Noticia noticia = new Noticia(input.getIntValue("id"));
         session.delete(noticia);
         loadAll();
         return SUCCESS;
     }
 	
     public Collection loadAll() throws Exception {
         //Mostra apenas 10 últimas notícias ordenadas pela data decrescente.
         Collection<Noticia> lista = (Collection)session.loadList(new Noticia(),"data desc", 10);
         output.setValue("lista", lista);
         return lista;
     }
 	
     public void initValidator(Validator val, String innerAction) {
         if(innerAction.equals("add") || innerAction.equals("updt")) {
             val.add("data", new RequiredFieldRule(), DATA);
             val.add("chamada", new RequiredFieldRule(), CHAMADA);
             val.add("lide", new RequiredFieldRule(), LIDE);
             val.add("texto", new RequiredFieldRule(), TEXTO);
         }
     }
     
     private static final String DATA = "Informe a data.";
     private static final String CHAMADA = "Informe a chamda.";
     private static final String LIDE = "Informe o lide.";
     private static final String TEXTO = "Informe o texto.";
 	
 }
 
 


JSP

Favor ignorar o CSS..

Code:
 <%@ taglib uri="/WEB-INF/lib/mentawai.jar" prefix="mtw" %>
 
 <table cellspacing="0" cellpadding="10" width="100%">
     <tr>
     	<td id="bg_3"><font class="others">Cadastros > Notícia</font></td>
     </tr>
     <tr>
     <td align="left" id="bg_2">
         <div id="erro">
             <mtw:hasError><mtw:error field="data" /></mtw:hasError><br />
             <mtw:hasError><mtw:error field="chamada" /></mtw:hasError><br />
             <mtw:hasError><mtw:error field="lide" /></mtw:hasError><br />
             <mtw:hasError><mtw:error field="texto" /></mtw:hasError>
         </div>
         <mtw:isNull test="noticia">
 		    <mtw:formSkin name="form" caption="Adicionar notícia" action="NoticiaAction.add.mtw" method="post">
 		    Data:<br />
 		    <mtw:inputDateConfig />
 		    <mtw:inputDate name="data" id="data" klass="mtwInputText" maxlength="10" size="10" title="Data"/>
 		    <br />
 		    Chamada:<br />
 		    <mtw:textarea klass="mtwTextArea" name="chamada" cols="140" rows="2" id="texto" />
 		    <br />
 		    Lide:<br />
 		    <mtw:textarea klass="mtwTextArea" name="lide" cols="140" rows="3" id="texto" />
 		    <br />
 		    Texto:<br />
 		    <mtw:textarea klass="mtwTextArea" name="texto" cols="140" rows="10" id="texto" />
 		    <br />
 		    <input type="submit" class="mtwButton" name="salvar" value="Salvar" /><br />
 		    </mtw:formSkin>
 		</mtw:isNull>
 		<mtw:isNull test="noticia" negate="true">    
 		    <mtw:formSkin name="form" caption="Atualizar notícia" action="NoticiaAction.updt.mtw" method="post">
 		    <input type="hidden" name="id" value="${noticia.id}" />
 		    Data:<br />
 		    <mtw:inputDateConfig />
 		    <mtw:inputDate name="data" id="data" klass="mtwInputText" dateFormat="dd/MM/yyyy" maxlength="10" size="10" title="Data" value="${noticia.data}"/>
 		    <br />
 		    Chamada:<br />
 		    <mtw:textarea klass="mtwTextArea" name="chamada" cols="140" rows="2" id="texto" >${noticia.chamada}</mtw:textarea>
 		    <br />
 		    Lide:<br />
 		    <mtw:textarea klass="mtwTextArea" name="lide" cols="140" rows="3" id="texto" >${noticia.lide}</mtw:textarea>
 		    <br />
 		    Texto:<br />
 		    <mtw:textarea klass="mtwTextArea" name="texto" cols="140" rows="10" id="texto" >${noticia.texto}</mtw:textarea>
 		    <br />
 		    <input type="submit" class="mtwButton" name="atualizar" value="Atualizar" /><br />
 		    </mtw:formSkin>
 		</mtw:isNull>
 		<table border="0" cellpadding="2" cellspacing="1" width="100%">
 		<mtw:list value="lista">
 		<tr id="bg_3"><td>Data</td><td>Chamada</td><td>Lide</td><td width="60">Atualizar</td><td width="60">Apagar</td></tr>
 		<mtw:loop>
 		<tr onMouseOver='this.style.backgroundColor="#99B3CC";' onMouseOut='this.style.backgroundColor="";'>
 		<td><mtw:out value="data" formatter="dateFormatter" /></td>
 		<td><mtw:out value="chamada" max="100" /></td>
 		<td><mtw:out value="lide" max="100" /></td>
 		<td width="60" align="center"><a href="NoticiaAction.load.mtw?id=<mtw:out value="id" />">##</a></td>
 		<td width="60" align="center"><a href="NoticiaAction.del.mtw?id=<mtw:out value="id" />">X</a></td>
 		</tr>		
 		</mtw:loop>
 		</mtw:list>
 		</table>
     </td>
     </tr>
 </table>
 


erro.jsp (para o ExceptionFilter)

Code:
 <%@ taglib uri="/WEB-INF/lib/mentawai.jar" prefix="mtw" %>
 <mtw:out value="exception" />
 <hr /> 
 <mtw:out value="message" /> 
 <hr />
 <mtw:out value="stackheader" /> 
 <hr />
 <mtw:out value="stacktrace" />
 


Script da tabela no Mysql

Code:
 create table noticia (
    id int(5) not null auto_increment,
    chamada text not null,
    texto text not null,
    data datetime not null,
    lide text not null,
    primary key (id)
 ) Engine = innodb;
 


No final você terá algo assim:

Você pode incrementar usando um editor WYSIWYG como o fckeditor http://www.fckeditor.net/demo fica a seu cargo.

Sugestões são bem vindas no fórum Comentários Gerais
http://forum.mentaframework.org/posts/list/1251.page




[Thumb - action_crud_noticia.png]
 Filename action_crud_noticia.png [Disk] Download
 Description Tela Action-CRUD de notícia
 Filesize 12 Kbytes
 Downloaded:  1096 time(s)


Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Como efeito ilustrativo, estou colocando abaixo a mesma versão da aplicação usando uma POJO action.

Pontos para notar:

1) A validação sai fora e fica num ValidationFilter.

2) Código menor não é necessariamente código melhor.

Code:
  public class NoticiaAction {
  
      private BeanSession session;
  	
      public void execute() throws Exception {
          loadAll();
      }
  
      public void add(Noticia noticia) throws Exception {
          //Adiciono no formato que preciso.
          noticia.setData(input.getDate("data","dd/MM/yyyy"));
          session.insert(noticia);
          //Atualiza a lista após o insert...
          loadAll();
      }
  	
      public void load(int id) throws Exception {
          Noticia noticia = new Noticia(id);
          session.load(noticia);
          output.setValue("noticia", noticia);
          loadAll();
      }
      
      public void updt(Noticia noticia) throws Exception {
          session.update(noticia);
          loadAll();
      }
      
      public void del(int id) throws Exception {
          Noticia noticia = new Noticia(id);
          session.delete(noticia);
          loadAll();
      }
  	
      public Collection loadAll() throws Exception {
          //Mostra apenas 10 últimas notícias ordenadas pela data decrescente.
          Collection<Noticia> lista = (Collection)session.loadList(new Noticia(),"data desc", 10);
          output.setValue("lista", lista);
          return lista;
      }
  }
 


Sergio Oliveira

Lobo


[Avatar]

Joined: 23/01/2006 02:17:14
Messages: 840
Location: Fortaleza-CE
Offline

Action-CRUD com MentaBean + Banco de dados embarcado

O mentawai agora possui a classe H2BeanSession para trabalhar com MentaBean + H2 Dadabase

H2 http://www.h2database.com/html/frame.html

O arquivo WAR não possui jars portanto as dependências são :

h2.jar
mentawai.jar (versão 1.10.1)
commons-pool-1.3.jar
commons-dbcp-1.2.2.jar

Sugestões são bem vindas no fórum Comentários Gerais
http://forum.mentaframework.org/posts/list/1251.page
 Filename actioncrud.war [Disk] Download
 Description
 Filesize 72 Kbytes
 Downloaded:  925 time(s)


Atenciosamente,
Hélio Frota

Helio Frota
10+ Java Programmer
heliofrota.com

Member
Mentawai Developer
ti_edson


[Avatar]
Joined: 02/03/2007 20:05:55
Messages: 17
Location: Franca - SP
Offline

Pessoal, eu fiz exatamente como mostrados nos códigos, mas tive dois problemas...

1º) O meu Netbeans apontou erro aqui "public class NoticiaAction extends BaseAction implements Validatable {", falando que era para criar um médoto novo por conta do "Valitable".

2º) Quando compilo, gera o erro:
"com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException"
"sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)"


Alguém poderia me ajudar a colocar esse exemplo para funcionar?
Tem o Jar do código com MySQL disponível para download?

saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


Esse post é muito antigo e deve estar desatualizado.

Recomendo o MentaBlank: http://forum.mentaframework.org/posts/list/2125.page

Sergio Oliveira

 
Forum Index -> F.A.Q.
Go to:   
Powered by JForum 2.1.6 © JForum Team