[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: bermark  XML
Profile for bermark -> Messages posted by bermark [16] Go to Page: 1, 2 Next 
Author Message
Ok. Funcionou!

Apenas adicionando:

Code:
 r.addParameter("proxy", "proxy");
 


Resolveu ambas as situações.

Obrigado Robert!

Abraços

Interessante...

Na empresa, com proxy:
- 411: Length Required

Em casa, sem proxy:
- 406: Not acceptable

Obrigado pela atenção.
Nobres amigos do Menta,

Estou com um problema relativamente estranho com o MentaAjax.

Vejam só a situação:
- Rodando a aplicação localmente, funciona no IE e no FF.
- Rodando ela pelo servidor remoto (host), funciona no IE mas falha no FF.

Até agora consegui detectar 2 erros e pelo que me parece são erros HTTP:
- 406: Not acceptable
- 411: Length Required

Ambos ocorrem quando invoco determinadas funções javascript que utilizam o mtw.request() e mtw.response(), e são exibidos por meio de um alert().

Depois de procurar bastante, na net e no fórum do menta, verifiquei a questão do charset, tentei com o UTF-8 e com o ISO-8859-1, alterando, inclusive, o <mtw:ajaxConfig/> para <mtw:ajaxConfig charset="ISO-8859-1"/>

Nem todas as funções com Ajax tem dado o erro. Segue uma em que ocorre:
Code:
 
 		function getProductRules() {
 		    var r = new mtw.request();
 		    r.setUrl("DefineProductRulesAction.getProductRules.mtw");
 		    r.onSuccess(
 		        function(data) {
 		            var response = new mtw.response(data);
 		            response.innerHTML("div3");
 		            
 		        }
 		    );                
 		    r.useLoadingMessage();
 		    r.send();
 		}
 
 


O componente HTML que recebe o resultado é um DIV.

Pelo que pude observar no Log do servidor não ocorrem erros na action java, cujo output é definido assim:

Code:
 output.setValue(AjaxConsequence.KEY, "saida");
 


O que pode estar ocasionando o problema? E por que apenas no Firefox? Por que algumas actions ajax funcionam normalmente?

Obrigado pela atenção.
54 Portal de comércio eletrônico - 70%
55 Gerenciamento e divulgação de eventos - em análise


[]s
Marcos
Estou com alguns problemas com o uso da JPA no Tomcat e talvez vocês possam me ajudar..

Usando a implementação Toplink, criei um projeto com uma tela inicial de Login.

O que está acontecendo é que quando o site é carregado e o formulário de Login submetido, a autenticação falha, ou seja, o usuário informado do formulário não é encontrado.

Constatei que isso acontece porque o contexo/conexão JPA ainda não está concluída. Isto é, se eu tendo o Login uma vez, duas vezes, na terceira vez ele acontece com sucesso, exatamente no momento em que a conexão JPA está realizada.

Não consigo entender por quê isso acontece, na máquina local não tenho esse problema.

O método de login não deveria aguardar o término da criação do contexto?

Criei um filtro. Quando a action responsável pelo login é invocada, no seu input "vem" um EntityManager com uma transação aberta. Quando a action é encerrada o filtro comita a transação e fecha o EntityManager (close).

Quando a aplicação é inicializada (filtro é instanciado no ApplicationManager - loadActions) acontece a criação do EMF (EntityManagerFactory) do contexto em questão.

O que pode estar errado?


ApplicationManager
Code:
 	public void loadActions() {
 	
 		
         
 		
         filter(new JPAFilter("PU")); 
 
 		
 		/* Filtro de autenticação */
 		addGlobalFilter (new AuthenticationFilter());
 		addGlobalConsequence(AuthenticationFilter.LOGIN	, new Redirect("/index.jsp"));
 		//Login
 		ActionConfig ac = new ActionConfig("/Login", LoginAction.class);
 		ac.addConsequence(LoginAction.SUCCESS,  new Redirect ("/index.jsp"));
 		ac.addConsequence(LoginAction.ERROR, new Forward ("/index.jsp"));
 		addActionConfig(ac);
 		
 		ac.addFilter(new RedirectAfterLoginFilter());
 		ac.addConsequence(RedirectAfterLoginFilter.REDIR, new Redirect());
 		//Logout
 		ac = new ActionConfig("/Logout", LogoutAction.class);
 		ac.addConsequence(LogoutAction.SUCCESS, new Redirect("/index.jsp"));
 		addActionConfig(ac);
 		/* Fim do filtro de autenticação */
 		
 
 }
 
 



Filtro para o JPA
Code:
 
 public class JPAFilter extends InputWrapper implements AfterConsequenceFilter {
 
 
 	public static final String KEY = "jpa_entityManager";
 
 	private String EntityManagerKEY = KEY;
 		
 	private EntityManagerFactory emf;
 	
 	private ThreadLocal<EntityManager> emLocal = new ThreadLocal<EntityManager>();
 	
 	private ThreadLocal<EntityTransaction> transLocal = new ThreadLocal<EntityTransaction>();
 
 
 
 	/**
 	 * Construtor
 	 * 
 	 * @param persistenceUnit
 	 */
 	public JPAFilter(String persistenceUnit) {
 		Factory.setPU(persistenceUnit);
 		Factory.getInstance();
 		
 	}
 
 
 
 	
 	public String filter(InvocationChain chain) throws Exception {
 		
 		Action action = chain.getAction();
 
 		super.setInput(action.getInput());
 
 		action.setInput(this);
 
 		String result = chain.invoke();
 
 		
 		return result;
 	}
 
 	public void afterConsequence(Action action, Consequence c,
 			boolean conseqExecuted, boolean actionExecuted, String result) {
 
 		EntityManager em = emLocal.get();
  
 		if (em != null) {
 			try {
 				em.getTransaction().commit();	
 			} catch (Exception e) {
 				Debug.log("Não foi possível efetuar COMMIT da na transação.",  "Mensagem: " + e.getMessage());
 			}
 			
 			em.close();
 			emLocal.set(null);
 			removeValue(EntityManagerKEY);
 		}
 	}
 
 	public void destroy() {
 		Factory.close();
 		
 	}
 
 	public Object getValue(String key) {
 		
 			
 		if (key.equals(EntityManagerKEY)) {
 		
 			
 			EntityManager em = emLocal.get();
 			
 			if (em == null) {
 				
 				try {
 					em = Factory.getInstance().getEntityManager();  
 					emLocal.set(em);
 					
 				} catch (Exception e) {
 					Debug.log("Não foi possível criar EntityManager.",  "Mensagem: " + e.getMessage());
 				}
 			}
 			
 			
 			em = emLocal.get();
 			if (em != null){
 				
 				try {
 					em.getTransaction().begin(); 
 					setValue(key, em);
 				} catch (Exception e) {
 					Debug.log("Não foi possível efetuar start da na transação.",  "Mensagem: " + e.getMessage());		
 				}
 			} 
 			
 			
 
 			return em;
 			}
 
 		return super.getValue(key);
 	}
 
 



Factory
Code:
 public class Factory {
 	private static Factory instance = null;
 	
 	private static String PU;
 	
 	private EntityManagerFactory factory = null;
 	
 	private EntityManager em = null;  
 	
 	public Factory () {
 		try {
 			factory = Persistence.createEntityManagerFactory(PU);
 		} catch (Exception e) {
 			Debug.log("Exceção ao criar EntityManagerFactory. ", 
 					"Mensagem: " + e.getMessage());	
 			throw new RuntimeException(e);  
 		}
 	}
    
     public EntityManager getEntityManager() {  
         try {  
               
              em = factory.createEntityManager();  
              return em;  
                
         } catch (Exception e) {  
         	Debug.log("Exceção ao criar EntityManager. ", 
 					"Mensagem: " + e.getMessage());	
              throw new RuntimeException(e); 
             
          }  
     }  
        
     public static synchronized Factory getInstance() {  
          if (instance == null) {  
              instance = new Factory();  
          }  
          return instance;  
      }
 
 	public static void setPU(String persistenceUnit) {
 		PU = persistenceUnit;
 		
 	}  
     
 	public static void close() {
 		if (instance.em != null)
 		if (instance.em.isOpen())
 			instance.em.clear();
 		
 		if (instance.factory != null)
 		if (instance.factory.isOpen())
 			instance.factory.close();
 	}
 
 



LoginAction
Code:
 public class LoginAction extends BaseLoginAction {
 	
 	
 	public String execute() throws Exception {
 
 		
 		if (!isPost())
 			return ERROR;
 		Entidade e = null;
 		try {
 			
 	  
 			EntityManager manager = (EntityManager) input.getValue(JPAFilter.KEY);
 			
 			e =  (Entidade) JpaDao.recuperarUm(manager, "Entidade.recuperaEntidadePorLogin", 
 	    							"login", username.toLowerCase());
 	    	
 	    	
 	    	
 	      	if (e != null) {
 	      		if (!e.getPassword().equalsIgnoreCase(password))
 	    			{	
 		    			addError("resultado", "Senha inválida.");
 		    			
 		    			return ERROR;
 	    			}	
 	      	} else {
 	      		Debug.log("Exceção ao tentar efetuar Login (Entidade retornou NULO).", "Username: " + username + " Password: "+ password);	      		
     				addError("resultado", "Login e/ou senha inválido(s).");
     			
     			return ERROR;
 	      	}
 	      	
 	      	//----
 		} catch (Exception ex) {
 			Debug.log("Exceção ao tentar efetuar Login (Entidade retornou NULO).",
 				"Mensagem: " + ex.getMessage());
 			return ERROR;
 		}
 
 		
 		try {
 			setUserSession(e);	
 		} catch (Exception ex ){
 			Debug.log("Exceção ao setar Usuário da sessão.", "ID Entidade: " + e.getId() + " Username: "+ e.getLogin(), "Mensagem: " + ex.getMessage());
 		}
 		
 		
 
 		return SUCCESS;
 	}
 
 }
 


Qualquer ajuda é bem vinda..

Obrigado

Marcos
Criadores e desenvolvedores do Menta:

Quando executamos setUserSession(user) a sessão atual é perdida (reset) ?

Questiono se esta situação não poderia ser modificada, principalmente pelo uso da RedirectAfterLogin...

O exemplo clássico é o carrinho de compras, que deve permanecer na sessão antes e depois do login...

Acredito que o StickAction não resolve, tendo em vista que ele permanece apenas em uma única Action...

Abraços e parabéns pelo fw..

IceW0lf wrote:
Pergunta.

Porque não vc não utiliza o checkboxes e radiobuttons do mentawai ?

Até porque na hora de dar um "selected" por exemplo ele gerenciaria isso pra vc. 


Para gerar os "checkboxes e radiobuttons" do mentawai, preciso fazer o teste (mtw:if), que por sua vez... não funfa.

Alguém já teve algum problema semelhante?

Abraços
pelo que pude observar, realmente, não é a RedirectAfterLogion o problema.

o que faz-me perder o carrinho da sessão é o setUserSession(user);

uso uma variável auxiliar para retornar o carrinho à sessão...


algo a ser pensado para o framework...
utilizando as tags do menta. como gerencio o nome dos componentes?
Caso Máximo = 1, deve gerar apenas radiobuttons, se for diferente, deve gerar checkbuttons...

O código abaixo, gera apenas checkbuttons... O teste (<mtw:if> não funciona.... qndo uso <mtw:out value="maximo"> exibe o valor correto.

O que pode estar errado?



Code:
 
 <mtw:list value="produto.definicaoEspecificacoes">
     <mtw:loop var="definicao">
 	<b><mtw:out value="categoria.nome" /></b>
 	<br>
 
 	Máximo:<mtw:out value="maximo" />
 			
 	<mtw:if test="definicao.maximo" value="1" negate="true">
 	<mtw:list value="definicao.especificacoes">
 		<mtw:loop var="especificacao">
 		     <input type="checkbox" name="especificacao" value="<mtw:out value="especificacao.id"/>"> 
                      <mtw:out value="especificacao.descricao"/> 
                      
 		</mtw:loop>
 	</mtw:list>
 	</mtw:if>
 										
 	<mtw:if test="definicao.maximo" value="1">
 	<mtw:list value="definicao.especificacoes">
 		<mtw:loop var="especificacao">
 			<input type="radio" name="especificacao" value="<mtw:out value="especificacao.id"/>">
                         <mtw:out value="especificacao.descricao"/> <
 		</mtw:loop>
 	</mtw:list>
 	</mtw:if>
 									  
 
     </mtw:loop>
 </mtw:list>
 
 



Sds.
Marcos
Olá povo do Menta...

Estou com o pequeno problema quando usando RedirectAfterLogin.

O usuário escolhe os produtos e adiona ao carrinho de compras. Quando tenta finalizar a compra, se não estiver logado é direcionado para a página de login e, depois, encaminhado de volta para a página de finalização do pedido.

O problema é que quando retornamos após o login os dados da sessão são perdidos, neste caso o carrinho de compras.

Alguém já passou por esta situação?

Obrigado.

Marcos
Então..

Como faço para "abstrair" através de IoC as "conexões" com o banco de dados.

Deixando de pegar uma instância através do DAO

DAOGenerico<Cliente> clienteDAO = new DAOGenerico<Cliente>;

O que exatamente é a IoC?
Olá,

Após ler alguns comentários por aí resolvi perguntar para quem realmente entende.

Como substituir os DAOs por "Injeção de Dependências"

Se é que isso existe...

Abraços,

Marcos
Olá!

Pessoal, estou desenvolvendo um sistema onde o produto pode ter várias categorias e subcategorias.
Estou usando JPA com Toplink.

Minha classe Categoria está assim:
Code:
 @Entity
 @Table (name="tb_categorias")
 public class Categoria extends Persistivel implements java.io.Serializable {
         
    
 	private static final long serialVersionUID = 1L;
 
 	@Column (name = "descricao")
 	private String descricao;
 	 
     @ManyToOne (fetch=FetchType.EAGER, cascade = CascadeType.PERSIST)
     @JoinColumn (name = "categoria_pai_id")
     private Categoria categoriaPai;
 	 
     @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
     @JoinTable (name = "tb_subcategorias")
     private Collection<Categoria> subCategorias;
 
 ...
 


Gostaria de sugestões para melhorar esta estrutura e se, alguém tiver algo semelhante, os métodos de procura recursiva utilizados.

Acredito que seja a implementação do padrão Composite:


Abraços,
Posts sobre o assunto:

- http://forum.mentaframework.org/posts/list/1361.page
- http://forum.mentaframework.org/posts/list/1950.page
- http://forum.mentaframework.org/posts/list/1494.page

[]s
 
Profile for bermark -> Messages posted by bermark [16] Go to Page: 1, 2 Next 
Go to:   
Powered by JForum 2.1.6 © JForum Team