[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Messages posted by: gulira  XML
Profile for gulira -> Messages posted by gulira [14]
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???
 
Profile for gulira -> Messages posted by gulira [14]
Go to:   
Powered by JForum 2.1.6 © JForum Team