| Author |
Message |
|
|
Galera achei o problema
lá no meu aplicationManager
Code:
ac.addFilter(new VOFilter(User.class));
eu não estava passando o segundo parametro string "User" para o VOFilter.
Correto: Code:
ac.addFilter(new VOFilter(User.class, "user"));
Más agora surgiu uma duvida.
Porque eu tenho que passar o indicador do objeto??? Sendo que em outros casos ele funciona sem a passagem deste parametro
|
 |
|
|
Galera nao consegui descobrir o q esta acontecendo.... O q pode ser??
Code:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: java.lang.reflect.InvocationTargetException
org.mentawai.core.Controller.service(Controller.java:196)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
root cause
org.mentawai.core.ActionException: java.lang.reflect.InvocationTargetException
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:79)
org.mentawai.filter.InjectionFilter.filter(InjectionFilter.java:175)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
org.mentawai.filter.IoCFilter.filter(IoCFilter.java:94)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
org.mentawai.filter.ValidationFilter.filter(ValidationFilter.java:146)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
org.mentawai.filter.AuthenticationFilter.filter(AuthenticationFilter.java:63)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
org.mentawai.core.Controller.invokeAction(Controller.java:223)
org.mentawai.core.Controller.service(Controller.java:191)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
ApplicationManager
Code:
/* USER MANAGER */
// UserManager.registration
ac = new ActionConfig("/UserManager",UserManagerAction.class,"registration");
addActionConfig(ac);
ac.addConsequence(Action.SUCCESS, new Forward("/jsp/usermanager/viewUser.jsp"));
ac.addConsequence(Action.ERROR, new Forward("/jsp/usermanager/regUser.jsp"));
ac.addFilter(new UserRegistrationValidationFilter());
ac.addFilter(new VOFilter(User.class));
ac.addFilter(new IoCFilter(userDao,"userDao",IoCFilter.REQUEST));
ac.addFilter(new InjectionFilter());
UserManagerAction.java
Code:
package jtest.mentawai.actions.registers;
imports.....
public class UserManagerAction extends BaseAction implements ModelDriven {
private final int LOGIN_ALREADY_EXISTS = 1;
private final int EMAIL_ALREADY_EXISTS = 2;
private UserManager model = new UserManager();
public Object getModel(){
return this.model;
}
public UserManagerAction() { }
public String execute() throws Exception {
throw new ActionException("Nothing here!");
}
public String registration() throws Exception{
int result = model.register();
if (result == UserManager.OK) {
return SUCCESS;
} else if (result == UserManager.LOGIN_ALREADY_EXISTS) {
addError("login",LOGIN_ALREADY_EXISTS);
return ERROR;
} else if (result == UserManager.EMAIL_ALREADY_EXISTS) {
addError("email", LOGIN_ALREADY_EXISTS);
return ERROR;
}
return ERROR;
}
public String show() throws Exception{
return "";
}
public String remove() throws Exception{
return "";
}
}
UserManager.java
Code:
package jtest.model;
import jtest.dao.UserDao;
import jtest.pojo.User;
public class UserManager {
public static final int OK = 1;
public static final int LOGIN_ALREADY_EXISTS = 1;
public static final int EMAIL_ALREADY_EXISTS = 2;
private UserDao userDao = null;
private User user = null;
public UserManager() {}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int register() throws Exception {
if (userDao == null) throw new IllegalStateException("userDao is not set for Registration!");
if (user == null) throw new IllegalStateException("no user for Registration!");
User u = userDao.loadByLogin(user.getLogin());
if (u != null) return LOGIN_ALREADY_EXISTS;
u = userDao.loadByEmail(user.getEmail());
if (u != null) return EMAIL_ALREADY_EXISTS;
userDao.save(user);
System.out.println("Entrou no User Manager3");
return OK;
}
}
|
 |
|
|
|
Show de Bola....
|
 |
|
|
Sergio consegui.
Na verdade fiz o seguinte.
Eu estava rodando minha aplicação Mentawai em cima do Application Server Sun 8 no Suse linux. Então simplesmente fui para o windows rodei em cima do tomcat 5.5.7 e funcionou perfeitamente como uma joia.
testei tambem o http://mentawai.lohis.com.br/examples/HelloIoC.war no Application Server da Sun e nao funcionou dai eu coloquei no tomcat e boa, funcionou.
pelo q eu percebi nao esta fazendo a Injection nas interface da action.
Más blz. So fiz uma alteração no meu applicationManager, em vez de adicionar o filtro de ioc para cada Action resolvi colocar como globalFilter
addGlobalFilter(new IoCFilter(c1,"users", IoCFilter.APPLICATION));
addGlobalFilter(new InjectionFilter(true));
para nao ficar fazendo sempre e ficar redundante......
Será q assim da alguma perda de performace?????
|
 |
|
|
Sergio vai aqui o codigo limpo...
Esta action nao faz nada so estou testando se esta ok. blz
E o objeto "gulira" ja existe la na minha Collection. se vc ver la me UserDaoCollection.java eu ja instancio um objeto só de teste ok.
lá vai o codigo
Code:
package jtest.mentawai.actions.registers;
import jtest.dao.UserDao;
import jtest.dao.collection.UserDaoCollection;
import org.mentawai.core.BaseAction;
import jtest.pojo.User;
import org.mentawai.filter.AuthenticationFree;
public class ActionRegisterUser extends BaseAction implements AuthenticationFree{
private static final int MSG_CONGRATULATION_REGISTER = 1;
private static final int MSG_CONGRATULATION_UPDATE = 2;
private static final int ERROR_EXIST_LOGIN = 3;
private UserDao users = null;
public String execute() throws org.mentawai.core.ActionException {
User user = (User)users.getObject("gulira");
return SUCCESS;
}
}
erro
Code:
java.lang.NullPointerException
jtest.mentawai.actions.registers.ActionRegisterUser.execute(ActionRegisterUser.java:19)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:87)
org.mentawai.filter.InjectionFilter.filter(InjectionFilter.java:172)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
org.mentawai.filter.IoCFilter.filter(IoCFilter.java:94)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
org.mentawai.core.Controller.invokeAction(Controller.java:221)
org.mentawai.core.Controller.service(Controller.java:188)
javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
|
 |
|
|
olhe o q ele esta me retornando
Code:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException
org.mentawai.core.Controller.service(Controller.java:193)
javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
root cause
java.lang.NullPointerException
jtest.mentawai.actions.registers.ActionRegisterUser.execute(ActionRegisterUser.java:30)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:87)
org.mentawai.filter.InjectionFilter.filter(InjectionFilter.java:172)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
org.mentawai.filter.IoCFilter.filter(IoCFilter.java:94)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:73)
org.mentawai.core.Controller.invokeAction(Controller.java:221)
org.mentawai.core.Controller.service(Controller.java:188)
javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
note The full stack trace of the root cause is available in the Sun-Java-System/Application-Server logs.
Ele faz o InjectionFilter normal.
Só este problema acontece quando vou tentar acessar o atributo users (minha infrface Dao) la na action: ActionRegisterUser.java:
fiz isto para testar e ver se o ioc esta funcionando e apareceu o erro
User user = (User)users.getObject("gulira");
|
 |
|
|
estou batendo cabeça aqui:
Olha so meu ApplicationManager:
Code:
package jtest.mentawai.actions;
imports........
public class ActionManager extends ApplicationManager {
private Component c1;
public void init(){
DefaultComponent c1 = new DefaultComponent(UserDaoCollection.class);
this.c1 = c1;
}
public void loadActions() {
ActionConfig ac;
/* ----------------------------------------------------------------------- */
/* CONTROLLER REGISTERS */
/* User */
ac = new ActionConfig("/registerUser",ActionRegisterUser.class);
ac.addConsequence(ActionRegisterUser.SUCCESS, new Forward("/jsp/reg/viewUser.jsp"));
ac.addConsequence(ActionRegisterUser.ERROR, new Forward("/jsp/reg/regUser.jsp"));
addActionConfig(ac);
ac.addFilter(new VOFilter(User.class));
//ac.addFilter(new UserValidation());
ac.addFilter(new IoCFilter(c1,"users", IoCFilter.APPLICATION));
ac.addFilter(new InjectionFilter(true));
public void loadLocales() {
LocaleManager .add(new Locale("pt", "BR"));
LocaleManager .add(new Locale("en", "US"));
}
}
ac.addFilter(new IoCFilter(c1,"users", IoCFilter.APPLICATION)); onde "users" é o nome no atributo (Interface UserDao) na Action
Code:
package jtest.pojo;
import java.util.*;
public class User {
private String firstname;
private String lastname;
private String country;
private String state;
private String city;
private String login;
private String password;
private String email;
private boolean active;
public User(){
}
geters and seters
}
Code:
package jtest.dao;
public interface DaoPattern {
public void save(Object object);
public void delete(String key);
public Object getObject(String key);
public java.util.List ListObjects();
}
Code:
package jtest.dao;
import jtest.pojo.User;
public interface UserDao extends DaoPattern{
}
Code:
UserDaoCollection
package jtest.dao.collection;
import....
public class UserDaoCollection implements UserDao{
private static TreeMap users = new TreeMap();
/** Creates a new instance of UserDaoCollection */
public UserDaoCollection() {
User usertest = new User();
usertest.setFirstname("RODRIGO");
usertest.setLastname("GUEDES DE SOUZA");
usertest.setLogin("gulira");
usertest.setPassword("123456");
this.save(usertest);
}
public jtest.pojo.User getObject(String login) {
return (jtest.pojo.User)users.get(login);
}
public void delete(String login) {
users.remove(login);
}
public void save(Object object) {
users.put(((User)object).getLogin(), (User)object);
}
public java.util.List ListObjects() {
return new ArrayList(users.values());
}
}
Code:
package jtest.mentawai.actions.registers;
imports.....
public class ActionRegisterUser extends BaseAction implements AuthenticationFree{
private static final int MSG_CONGRATULATION_REGISTER = 1;
private static final int MSG_CONGRATULATION_UPDATE = 2;
private static final int ERROR_EXIST_LOGIN = 3;
private UserDao users = null; Este Aqui é a Interface
public String execute() throws org.mentawai.core.ActionException {
User user = (User) input.getValue("jtest.pojo.User");
/* UpperCase Fields */
user.setFirstname(user.getFirstname().toUpperCase());
user.setLastname(user.getLastname().toUpperCase());
user.setCountry(user.getCountry().toUpperCase());
user.setState(user.getState().toUpperCase());
user.setCity(user.getCity().toUpperCase());
user.setEmail(user.getEmail().toUpperCase());
/* Not active Default */
user.setActive(false);
if (users.getObject(user.getLogin()) == null){
users.save(user);
output.setValue("user",user);
addMessage(MSG_CONGRATULATION_REGISTER);
return SUCCESS;
}else{
//Update or Error (Incomplete)
//addMessage(MSG_CONGRATULATION_UPDATE);
// addError(ERROR_EXIST_LOGIN);
return ERROR;
}
//UserDao users = new UserDaoCollection();
//Insert
/*if (users.getUser(user.getLogin()) == null){
users.save(user);
output.setValue("user", user);
addMessage(MSG_CONGRATULATION_REGISTER);
return SUCCESS;
}else{
//Update or Error (Incomplete)
//addMessage(MSG_CONGRATULATION_UPDATE);
//addError(ERROR_EXIST_LOGIN);
return ERROR;
} */
}
}
Onde estou pecando ai?????
O objetivo deste codigo e gravar os dados em um TreeMap() mas usando Dao.
|
 |
|
|
Blz Sergio....
Vou implementar com ioC então.
Muito obrigado.
|
 |
|
|
Galera é o seguinte.
Eu estou desenvolvendo uma aplicacao com o mentawai e a principio estou fazendo persistencia em collections sem fazer persistencia em disco, quero trabalhar encima disto num segundo momento.
Então para aproveitar a estrutura de DAOCollection resolvi implementar o Pattern Abstract Factory para gerenciar a minha persistência momentaneamente via Collections e num futuro proximo via hibernate, assim fica mais facil, pois dai e só criar meus Dao(Bens) para hibernate e boa, e depois só alterar o meu DaoFactory.
Entao a pergunta é: Qual o local apropiado para estar instanciando o DaoFactory no Mentawai. Seria Interessante fazer um Extends da BaseAction e Adicionar este DaoFactory como um atributo static final???? Deste modo nao vai dar algum problema, pois nao sei se a BaseAction é criada uma nova instancia a cada requisição, (ainda não olhei o fontes )
Existe um forma melhor de se trabalhar com o Pattern Abstract Factory dentro do mentawai. (Sera q o ioCFilter me ajudaria em alguma coisa???)
Descupe se falei alguma besteira.
|
 |
|
|
Realmente Sergio funcionou.
Mas eu tinha tentado com o output e nao estava funcionando!!!!!!
Estou desconfiado q eu estava usando Redirect em vez do Forward e nao percebi....
Valeu.
|
 |
|
|
Galera e o seguinte eu tenho um formulario em um jsp CadastroUsuario.jsp que chama uma Action que faz a inclusao do usuario no banco. (Ate aqui eu fiz somente inclusao do usuario). blz
Eu gostaria de utilizar esta mesma jsp para estar editando o usuario
Eu crie um action de edicao EditarUsuario.mtw
no ActionManger ficou assim
ac = new ActionConfig("/editUser",ActionEditUser.class);
ac.addConsequence(ActionEditUser.SUCCESS, new Forward("/jsp/reg/regUser.jsp"));
ac.addConsequence(ActionEditUser.ERROR, new Forward("/index.jsp"));
addActionConfig(ac);
que faz o Forward para o CadastroUsuario.jsp
Na minha action EditarUsuario tive que passar os dados de edicao via input.setValue('firstname', usuario.getFirstname());
pois tentei utilizar o output.setValue(....) e nao funcionou.
public class ActionEditUser extends BaseAction{
public String execute() throws org.mentawai.core.ActionException {
String login = input.getStringValue("login");
UserDaoCollection users = new UserDaoCollection();
User user = users.getUser(login);
input.setValue("firstname", user.getFirstname());
input.setValue("lastname", user.getLastname());
return SUCCESS;
}
}
http://localhost:8080/jtest/editUser.java?login=gulira
Entao gostaria de saber se isto esta correto e tambem gostaria de saber se existe um modo mais facil ou mais elegante para fazer edicao de dados (Nao q isto seja dificil...)
|
 |
|
|
|
Existe alguma tag que posso utlizar para mostrar todas as mensagems de erros ou de menssagens no topo da pagina sem precisar fazer: <mtw:hasError> <mtw:error field="campo" /></mtw:hasError> para todos os campos???? quero utilizar somente uma tag.....
|
 |
|
|
Galera estou tendo este erro:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Index: 0, Size: 0
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
root cause
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
java.util.ArrayList.RangeCheck(ArrayList.java:547)
java.util.ArrayList.get(ArrayList.java:322)
org.mentawai.i18n.LocaleManager.getDefaultLocale(LocaleManager.java:55)
org.mentawai.i18n.LocaleManager.getSupportedLocale(LocaleManager.java:127)
org.mentawai.i18n.LocaleManager.getLocale(LocaleManager.java:139)
org.mentawai.tag.util.PrintTag.doStartTag(PrintTag.java:4
org.apache.jsp.jsp.reg.regUser_jsp._jspx_meth_mtw_input_0(regUser_jsp.java:134)
org.apache.jsp.jsp.reg.regUser_jsp._jspService(regUser_jsp.java:59)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
Aqui vai o regUser.jsp:
<%@ taglib uri="/WEB-INF/lib/mentawai.jar" prefix="mtw" %>
<html>
<head><title>Cadastro de Usuário</title></head>
<body>
Cadastro de Usuarios<br>
<form action="/regUser.java" method="post">
Nome: <mtw:input type="text" name="firstname" size="50" maxlength="50" /><br/>
Sobre Nome: <mtw:input type="text" name="lastname" size="50" maxlength="50" /><br/>
Pais: <mtw:input type="text" name="country" size="30" maxlength="30" /><br/>
Estado: <mtw:input type="text" name="state" size="30" maxlength="30" /><br/>
Cidade: <mtw:input type="text" name="city" size="60" maxlength="60" /><br/>
E-mail: <mtw:input type="text" name="email" size="60" maxlength="60" /><br/>
Login: <mtw:input type="text" name="login" size="20" maxlength="20" /><br/>
Senha: <mtw:input type="text" name="password" size="10" maxlength="10" /><br/>
Name: <mtw:input type="text" name="firstname" size="50" maxlength="60" /><br/>
Username: <mtw:input type="text" name="lastname" size="20" maxlength="30" /><br/>
Password: <mtw:input type="password" name="pass" size="20" maxlength="20" /><br/>
Confirmação: <mtw:input type="confirm" name="pass" size="20" maxlength="20" /><br/>
<input type="submit" value="Salvar" />
</form>
</body>
</html>
Eu tenho que configura Internationalization messages???? O q pode ser???
|
 |
|
|