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