<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "21) Como Fazer uma aplicação Action-CRUD com MentaBean ?"]]></title>
		<link>http://forum.mentaframework.org/posts/list/19.page</link>
		<description><![CDATA[Latest messages posted in the topic "21) Como Fazer uma aplicação Action-CRUD com MentaBean ?"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>21) Como Fazer uma aplicação Action-CRUD com MentaBean ?</title>
				<description><![CDATA[ Simples Action-CRUD de Notícias utilizando :

 :arrow: <b>Mysql</b> http://www.mysql.com
 :arrow: <b>MentaBean</b> http://www.mentaframework.org/mentabean.jsp
 :arrow: <b>DI</b> http://www.mentaframework.org/depinj.jsp
 :arrow: <b>IOC</b> http://www.mentaframework.org/ioc.jsp
 :arrow: <b>ValidatorFilter</b> http://www.mentaframework.org/validation.jsp
 :arrow: <b>inputDate</b> http://www.mentaframework.org/inputDate.jsp
 :arrow: <b>formSkin</b> http://forum.mentaframework.org/posts/list/1007.page
 :arrow: <b>Pool</b> http://www.mentaframework.org/connfilter.jsp
 :arrow: <b>VOFilter</b> http://www.mentaframework.org/voovfilters.jsp
 :arrow: <b>ExceptionFilter</b> http://forum.mentaframework.org/posts/list/1096.page
 :arrow: <b>Formatters :</b>
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
...

 :idea: Bibliotecas em uso:
 :arrow: mentawai.jar 
http://www.mentaframework.org/mentawai.jar
 :arrow: commons-dbcp-1.2.2.jar 
http://jakarta.apache.org/site/downloads/downloads_commons-dbcp.cgi
 :arrow: commons-pool-1.3.jar
http://jakarta.apache.org/site/downloads/downloads_commons-pool.cgi
 :arrow: mysql-connector-java-3.1.12-bin.jar
http://www.mysql.com

<b>No ApplicationManager:</b>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

public class ApplicationManager extends org.mentawai.core.ApplicationManager {

    private ConnectionHandler connHandler;
    
    public void loadFormatters&#40;&#41; {
        FormatterManager.addFormatter&#40;"dateFormatter", new DateFormatter&#40;"dd/MM/yyyy"&#41;&#41;;
    }
    
    public void init&#40;Context application&#41; {
    	
        //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&#40;driver,url,login,pass&#41;;
        BasicDataSource ds = &#40;BasicDataSource&#41; &#40;&#40;DBCPConnectionHandler&#41; connHandler&#41;
        .getBasicDataSource&#40;&#41;;
        ds.setInitialSize&#40;5&#41;;
        ds.setMaxIdle&#40;5&#41;;
        ds.setMaxActive&#40;20&#41;;
     
    }
    
    public void loadBeans&#40;&#41; {
        
        bean&#40;bean.Noticia.class, "Noticia"&#41;
  	    .pk&#40;"id","id",DBTypes.AUTOINCREMENT&#41;
  	    .field&#40;"chamada", DBTypes.STRING&#41;
  	    .field&#40;"texto", DBTypes.STRING&#41;
  	    .field&#40;"lide", DBTypes.STRING&#41;
  	    .field&#40;"data", DBTypes.DATE&#41;;
  		
    }
    
    public void loadActions&#40;&#41; {
            
            filter&#40;new ExceptionFilter&#40;&#41;&#41;;
		
            on&#40;EXCEPTION, fwd&#40;"/error.jsp"&#41;&#41;;
 
            filter&#40;new IoCFilter&#40;&#41;&#41;;

            ioc&#40;"session",MySQLBeanSession.class&#41;;
 
            filter&#40;new ConnectionFilter&#40;"connection", connHandler&#41;&#41;;

            filter&#40;new ValidatorFilter&#40;&#41;&#41;;

            filter&#40;new DIFilter&#40;&#41;&#41;;

            di&#40;"connection", Connection.class&#41;.source&#40;"connection"&#41;; 

            filter&#40;new InjectionFilter&#40;&#41;&#41;;

            //Sim estou usando Super Tiny Style !
            action&#40;NoticiaAction.class&#41;.fwdOk&#40;"/noticia.jsp"&#41;;
    	    
            action&#40;NoticiaAction.class,"add"&#41;
    	        .fwdOk&#40;"/noticia.jsp"&#41;
    	        .fwdError&#40;"/noticia.jsp"&#41;
    	        .filter&#40;new VOFilter&#40;"noticia", Noticia.class&#41;&#41;;
            action&#40;NoticiaAction.class,"del"&#41;
                .fwdOk&#40;"/noticia.jsp"&#41;
                .fwdError&#40;"/noticia.jsp"&#41;;
            action&#40;NoticiaAction.class,"updt"&#41;
                .fwdOk&#40;"/noticia.jsp"&#41;
                .fwdError&#40;"/noticia.jsp"&#41;
                .filter&#40;new VOFilter&#40;"noticia", Noticia.class&#41;&#41;;
    }
}
</pre>
		</div>

<b>Classe Noticia</b>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

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&#40;&#41; {
   
   }
    
    public Noticia&#40;int id&#41; {
    	this.id = id;
    }
    
    //getters e setters
         
}
</pre>
		</div>

<b>Action</b>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

public class NoticiaAction extends BaseAction implements Validatable {

    private BeanSession session;
	
    public String execute&#40;&#41; throws Exception {
        loadAll&#40;&#41;;
        return SUCCESS;
    }

    public String add&#40;&#41; throws Exception {
        Noticia noticia = &#40;Noticia&#41;input.getValue&#40;"noticia"&#41;;
        //Adiciono no formato que preciso.
        noticia.setData&#40;input.getDate&#40;"data","dd/MM/yyyy"&#41;&#41;;
        session.insert&#40;noticia&#41;;
        //Atualiza a lista após o insert...
        loadAll&#40;&#41;;
        return SUCCESS;
    }
	
    public String load&#40;&#41; throws Exception {
        Noticia noticia = new Noticia&#40;input.getIntValue&#40;"id"&#41;&#41;;
        session.load&#40;noticia&#41;;
        output.setValue&#40;"noticia", noticia&#41;;
        loadAll&#40;&#41;;
        return SUCCESS;
    }
    
    public String updt&#40;&#41; throws Exception {
        Noticia noticia = &#40;Noticia&#41;input.getValue&#40;"noticia"&#41;; 
        session.update&#40;noticia&#41;;
        loadAll&#40;&#41;;
        return SUCCESS;
    }
    
    public String del&#40;&#41; throws Exception {
        Noticia noticia = new Noticia&#40;input.getIntValue&#40;"id"&#41;&#41;;
        session.delete&#40;noticia&#41;;
        loadAll&#40;&#41;;
        return SUCCESS;
    }
	
    public Collection loadAll&#40;&#41; throws Exception {
        //Mostra apenas 10 últimas notícias ordenadas pela data decrescente.
        Collection&lt;Noticia&gt; lista = &#40;Collection&#41;session.loadList&#40;new Noticia&#40;&#41;,"data desc", 10&#41;;
        output.setValue&#40;"lista", lista&#41;;
        return lista;
    }
	
    public void initValidator&#40;Validator val, String innerAction&#41; {
        if&#40;innerAction.equals&#40;"add"&#41; || innerAction.equals&#40;"updt"&#41;&#41; {
            val.add&#40;"data", new RequiredFieldRule&#40;&#41;, DATA&#41;;
            val.add&#40;"chamada", new RequiredFieldRule&#40;&#41;, CHAMADA&#41;;
            val.add&#40;"lide", new RequiredFieldRule&#40;&#41;, LIDE&#41;;
            val.add&#40;"texto", new RequiredFieldRule&#40;&#41;, TEXTO&#41;;
        }
    }
    
    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.";
	
}

</pre>
		</div>

<b>JSP</b>

  :!:  Favor ignorar o CSS..

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;%@ taglib uri="/WEB-INF/lib/mentawai.jar" prefix="mtw" %&gt;

&lt;table cellspacing="0" cellpadding="10" width="100%"&gt;
    &lt;tr&gt;
    	&lt;td id="bg_3"&gt;&lt;font class="others"&gt;Cadastros &gt; Notícia&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
    &lt;td align="left" id="bg_2"&gt;
        &lt;div id="erro"&gt;
            &lt;mtw:hasError&gt;&lt;mtw:error field="data" /&gt;&lt;/mtw:hasError&gt;&lt;br /&gt;
            &lt;mtw:hasError&gt;&lt;mtw:error field="chamada" /&gt;&lt;/mtw:hasError&gt;&lt;br /&gt;
            &lt;mtw:hasError&gt;&lt;mtw:error field="lide" /&gt;&lt;/mtw:hasError&gt;&lt;br /&gt;
            &lt;mtw:hasError&gt;&lt;mtw:error field="texto" /&gt;&lt;/mtw:hasError&gt;
        &lt;/div&gt;
        &lt;mtw:isNull test="noticia"&gt;
		    &lt;mtw:formSkin name="form" caption="Adicionar notícia" action="NoticiaAction.add.mtw" method="post"&gt;
		    Data:&lt;br /&gt;
		    &lt;mtw:inputDateConfig /&gt;
		    &lt;mtw:inputDate name="data" id="data" klass="mtwInputText" maxlength="10" size="10" title="Data"/&gt;
		    &lt;br /&gt;
		    Chamada:&lt;br /&gt;
		    &lt;mtw:textarea klass="mtwTextArea" name="chamada" cols="140" rows="2" id="texto" /&gt;
		    &lt;br /&gt;
		    Lide:&lt;br /&gt;
		    &lt;mtw:textarea klass="mtwTextArea" name="lide" cols="140" rows="3" id="texto" /&gt;
		    &lt;br /&gt;
		    Texto:&lt;br /&gt;
		    &lt;mtw:textarea klass="mtwTextArea" name="texto" cols="140" rows="10" id="texto" /&gt;
		    &lt;br /&gt;
		    &lt;input type="submit" class="mtwButton" name="salvar" value="Salvar" /&gt;&lt;br /&gt;
		    &lt;/mtw:formSkin&gt;
		&lt;/mtw:isNull&gt;
		&lt;mtw:isNull test="noticia" negate="true"&gt;    
		    &lt;mtw:formSkin name="form" caption="Atualizar notícia" action="NoticiaAction.updt.mtw" method="post"&gt;
		    &lt;input type="hidden" name="id" value="${noticia.id}" /&gt;
		    Data:&lt;br /&gt;
		    &lt;mtw:inputDateConfig /&gt;
		    &lt;mtw:inputDate name="data" id="data" klass="mtwInputText" dateFormat="dd/MM/yyyy" maxlength="10" size="10" title="Data" value="${noticia.data}"/&gt;
		    &lt;br /&gt;
		    Chamada:&lt;br /&gt;
		    &lt;mtw:textarea klass="mtwTextArea" name="chamada" cols="140" rows="2" id="texto" &gt;${noticia.chamada}&lt;/mtw:textarea&gt;
		    &lt;br /&gt;
		    Lide:&lt;br /&gt;
		    &lt;mtw:textarea klass="mtwTextArea" name="lide" cols="140" rows="3" id="texto" &gt;${noticia.lide}&lt;/mtw:textarea&gt;
		    &lt;br /&gt;
		    Texto:&lt;br /&gt;
		    &lt;mtw:textarea klass="mtwTextArea" name="texto" cols="140" rows="10" id="texto" &gt;${noticia.texto}&lt;/mtw:textarea&gt;
		    &lt;br /&gt;
		    &lt;input type="submit" class="mtwButton" name="atualizar" value="Atualizar" /&gt;&lt;br /&gt;
		    &lt;/mtw:formSkin&gt;
		&lt;/mtw:isNull&gt;
		&lt;table border="0" cellpadding="2" cellspacing="1" width="100%"&gt;
		&lt;mtw:list value="lista"&gt;
		&lt;tr id="bg_3"&gt;&lt;td&gt;Data&lt;/td&gt;&lt;td&gt;Chamada&lt;/td&gt;&lt;td&gt;Lide&lt;/td&gt;&lt;td width="60"&gt;Atualizar&lt;/td&gt;&lt;td width="60"&gt;Apagar&lt;/td&gt;&lt;/tr&gt;
		&lt;mtw:loop&gt;
		&lt;tr onMouseOver='this.style.backgroundColor="#99B3CC";' onMouseOut='this.style.backgroundColor="";'&gt;
		&lt;td&gt;&lt;mtw:out value="data" formatter="dateFormatter" /&gt;&lt;/td&gt;
		&lt;td&gt;&lt;mtw:out value="chamada" max="100" /&gt;&lt;/td&gt;
		&lt;td&gt;&lt;mtw:out value="lide" max="100" /&gt;&lt;/td&gt;
		&lt;td width="60" align="center"&gt;&lt;a href="NoticiaAction.load.mtw?id=&lt;mtw:out value="id" /&gt;"&gt;##&lt;/a&gt;&lt;/td&gt;
		&lt;td width="60" align="center"&gt;&lt;a href="NoticiaAction.del.mtw?id=&lt;mtw:out value="id" /&gt;"&gt;X&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;		
		&lt;/mtw:loop&gt;
		&lt;/mtw:list&gt;
		&lt;/table&gt;
    &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
</pre>
		</div>

<b>erro.jsp (para o ExceptionFilter)</b>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;%@ taglib uri="/WEB-INF/lib/mentawai.jar" prefix="mtw" %&gt;
&lt;mtw:out value="exception" /&gt;
&lt;hr /&gt; 
&lt;mtw:out value="message" /&gt; 
&lt;hr /&gt;
&lt;mtw:out value="stackheader" /&gt; 
&lt;hr /&gt;
&lt;mtw:out value="stacktrace" /&gt;
</pre>
		</div>

<b>Script da tabela no Mysql</b>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
create table noticia &#40;
   id int&#40;5&#41; not null auto_increment,
   chamada text not null,
   texto text not null,
   data datetime not null,
   lide text not null,
   primary key &#40;id&#41;
&#41; Engine = innodb;
</pre>
		</div>

<b>No final você terá algo assim:</b>

 :idea: 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




]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1250.page#10263</guid>
				<link>http://forum.mentaframework.org/posts/list/1250.page#10263</link>
				<pubDate><![CDATA[Thu, 17 May 2007 10:53:07]]> GMT</pubDate>
				<author><![CDATA[ Lobo]]></author>
			</item>
			<item>
				<title>Re:21) Como Fazer uma aplicação Action-CRUD com MentaBean ?</title>
				<description><![CDATA[ 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.

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
 public class NoticiaAction {
 
     private BeanSession session;
 	
     public void execute&#40;&#41; throws Exception {
         loadAll&#40;&#41;;
     }
 
     public void add&#40;Noticia noticia&#41; throws Exception {
         //Adiciono no formato que preciso.
         noticia.setData&#40;input.getDate&#40;"data","dd/MM/yyyy"&#41;&#41;;
         session.insert&#40;noticia&#41;;
         //Atualiza a lista após o insert...
         loadAll&#40;&#41;;
     }
 	
     public void load&#40;int id&#41; throws Exception {
         Noticia noticia = new Noticia&#40;id&#41;;
         session.load&#40;noticia&#41;;
         output.setValue&#40;"noticia", noticia&#41;;
         loadAll&#40;&#41;;
     }
     
     public void updt&#40;Noticia noticia&#41; throws Exception {
         session.update&#40;noticia&#41;;
         loadAll&#40;&#41;;
     }
     
     public void del&#40;int id&#41; throws Exception {
         Noticia noticia = new Noticia&#40;id&#41;;
         session.delete&#40;noticia&#41;;
         loadAll&#40;&#41;;
     }
 	
     public Collection loadAll&#40;&#41; throws Exception {
         //Mostra apenas 10 últimas notícias ordenadas pela data decrescente.
         Collection&lt;Noticia&gt; lista = &#40;Collection&#41;session.loadList&#40;new Noticia&#40;&#41;,"data desc", 10&#41;;
         output.setValue&#40;"lista", lista&#41;;
         return lista;
     }
 }
</pre>
		</div>
]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1250.page#10299</guid>
				<link>http://forum.mentaframework.org/posts/list/1250.page#10299</link>
				<pubDate><![CDATA[Sat, 19 May 2007 17:19:40]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
			<item>
				<title>Re:21) Como Fazer uma aplicação Action-CRUD com MentaBean ?</title>
				<description><![CDATA[  :!:  Action-CRUD com MentaBean + Banco de dados embarcado 

 :idea: O mentawai agora possui a classe <b>H2BeanSession</b> para trabalhar com MentaBean + H2 Dadabase

H2 http://www.h2database.com/html/frame.html

O arquivo <b>WAR</b> não possui <b>jars</b> portanto as dependências são :

 :arrow: h2.jar
 :arrow: mentawai.jar (versão 1.10.1)
 :arrow: commons-pool-1.3.jar
 :arrow: 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 ]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1250.page#10409</guid>
				<link>http://forum.mentaframework.org/posts/list/1250.page#10409</link>
				<pubDate><![CDATA[Fri, 25 May 2007 07:05:31]]> GMT</pubDate>
				<author><![CDATA[ Lobo]]></author>
			</item>
			<item>
				<title>Re:21) Como Fazer uma aplicação Action-CRUD com MentaBean ?</title>
				<description><![CDATA[ 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?

]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1250.page#16295</guid>
				<link>http://forum.mentaframework.org/posts/list/1250.page#16295</link>
				<pubDate><![CDATA[Sat, 15 Nov 2008 18:39:37]]> GMT</pubDate>
				<author><![CDATA[ ti_edson]]></author>
			</item>
			<item>
				<title>Re:21) Como Fazer uma aplicação Action-CRUD com MentaBean ?</title>
				<description><![CDATA[ 
Esse post é muito antigo e deve estar desatualizado.

Recomendo o MentaBlank: http://forum.mentaframework.org/posts/list/2125.page]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1250.page#16296</guid>
				<link>http://forum.mentaframework.org/posts/list/1250.page#16296</link>
				<pubDate><![CDATA[Sun, 16 Nov 2008 08:14:13]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
	</channel>
</rss>
