| 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
|
 |
|
|