Author |
Message |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2006 21:08:37
|
boaglio
![[Avatar]](/images/avatar/3416a75f4cea9109507cacd8e2f2aefc.jpg)
Joined: 28/09/2005 11:05:16
Messages: 299
Location: Sao Paulo - Brazil
Offline
|
11 ) Como suportar de forma simples CoC (Convention over Configuration) para a camada view, de forma que você não precise configurar as páginas de destino da sua action?
Apesar de acreditarmos que CoC para a camada view só é viável em projetos pequenos e muitos simples, o Mentawai oferece essa funcionalidade de maneira bastante fácil.
Se você esquecer ou propositalmente não especificar uma consequência para uma action, o Mentawai criará uma consequência do tipo Forward automaticamente seguindo a convenção abaixo:
Code:
Action sendo executada = HelloMentawai.mtw
- Action retornou SUCCESS: new Forward("/HelloMentawai/ok.jsp");
- Action retornou ERROR: new Forward("/HelloMentawai/error.jsp");
- Action retornou qualquer resultado X: new Forward("/HelloMentawai/X.jsp");
InnerAction sendo executada = HelloMentawai.sayhello.mtw
- Action retornou SUCCESS: new Forward("/HelloMentawai/sayhello.ok.jsp");
- Action retornou ERROR: new Forward("/HelloMentawai/sayhello.error.jsp");
- Action retornou qualquer restulado X: new Forward("/HelloMentawai/sayhello.X.jsp");
Caso vc queira alterar essa convenção do Mentawai para algo que melhor atenda o seu gosto ou necessidade, você pode usar a implementação de CoCActionConfig e criar o seu próprio CoCConsequenceProvider, ou seja, até as convenções do Mentawai podem ser configuradas, se assim vc desejar.
Observação: Essa funcionalidade está ativada por default. Entretanto se você preferir que o controlador jogue uma exception ao invés de tentar usar o esquema acima, você pode desativar esse CoC através do método do ApplicationManager setAutoView(false);
|
http://www.boaglio.com
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 12:38:29
|
YkyMatt
Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline
|
Notei um detalhe ao usar o CoC. No artigo é dito que o encaminhamento ocorre na URL do seguinte formato (por padrão):
${contextPath}/${actionName}/${innerActionName}.${consequenceResult}.jsp
Mas ocorre que tive erro de URL não encontrada aqui porque o encaminhamento ocorreu para um ${actionName}.toLowerCase()
Ou seja, eu tenho a action Clients, mas o encaminhamento foi feito para: myContext/clients/${page}.jsp
Essa característica de estar colocando o nome em lower case está incorreta ou é assim mesmo e houve um pequeno equívoco no artigo?
|
Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais
Mentawai Evangelist
http://www.chronusteam.com |
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 13:06:11
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Equivoco no artigo....
Nada te impede de implementar o seu próprio ConsequenceProvider para fazer isso do jeito que vc quiser...
(CoCConsequenceProvider mudou para ConsequenceProvider)
|
Sergio Oliveira
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 13:28:09
|
YkyMatt
Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline
|
saoj wrote:
...
Sim, sim, foi o que pensei.
E, como eu estou usando template, tive que implementar mesmo, já que por padrão vai extensão JSP, não é?
Code:
//package ...;
import org.mentawai.core.Consequence;
import org.mentawai.core.Forward;
public class CoCConsequenceProvider implements org.mentawai.coc.CoCConsequenceProvider
{
public Consequence getConsequence(String actionName, String result, String innerActionName)
{
String url = "/view/" + actionName + "/";
if (innerActionName != null && !innerActionName.trim().equals(""))
{ url += innerActionName + "."; }
url += result + ".page";
return (new Forward(url));
}
}
Então tentei redefinir o ConsequenceProvider no método init do ApplicationManager, fazendo assim:
Code:
CoCActionConfig.setConsequenceProvider(new CoCConsequenceProvider());
Mas não funcionou. Tentei então colocar no loadActions(), mas não adiantou. Não acusa erro, mas a URL continua sendo redirecionada para a URL padrão montada pelo ForwardCoCConsequenceProvider Default.
Cara, quando que mudou para ConsequenceProvider? Estou acessando a API aqui e só há a CoCConsequenceProvider.
|
Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais
Mentawai Evangelist
http://www.chronusteam.com |
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 14:08:05
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Tem que botar JSP sim...
Jar beta mudou... 1.10.1 ainda está com CoC....
|
Sergio Oliveira
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 14:11:40
|
YkyMatt
Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline
|
saoj wrote:
Tem que botar JSP sim...
Jar beta mudou... 1.10.1 ainda está com CoC....
Mas com essa implementação que fiz não deveria funcionar?
Code:
//package ...;
import org.mentawai.core.Consequence;
import org.mentawai.core.Forward;
public class CoCConsequenceProvider implements org.mentawai.coc.CoCConsequenceProvider
{
public Consequence getConsequence(String actionName, String result, String innerActionName)
{
String url = "/view/" + actionName + "/";
if (innerActionName != null && !innerActionName.trim().equals(""))
{ url += innerActionName + "."; }
url += result + ".page";
return (new Forward(url));
}
}
|
Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais
Mentawai Evangelist
http://www.chronusteam.com |
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 14:12:57
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Parece que sim.... Manjo pouco de templates... Liga o debug mode e veja qual a consequencia que ele está retornando...
|
Sergio Oliveira
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 14:23:38
|
YkyMatt
Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline
|
saoj wrote:
Parece que sim.... Manjo pouco de templates... Liga o debug mode e veja qual a consequencia que ele está retornando...
Fiz o seguinte:
adicionei a seguinte linha ao meu Applicationmanager:
Code:
public void init(Context app)
{
...
CoCActionConfig.setConsequenceProvider(new CoCConsequenceProvider()); // onde CoCConsequenceProvider é a Minha implementação
...
}
Resultado: continuou tudo na mesma, quando eu acesso /Clients.list.mtw ele redireciona para /clients/list.ok.jsp
Então eu alterei meu ApplicationManager fazendo-o extender CoCApplicationManager ao invés de ApplicationManager padrão.
Tentei colocar o código setConsequenceProvider(new CoCConsequenceProvider()); tanto no init quanto no loadActions(), mas em ambos os lugares que eu coloquei sempre que eu acessava Clients.list.mtw era lançada uma excessão no ActionConfig.getDirFromClass()
|
Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais
Mentawai Evangelist
http://www.chronusteam.com |
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 14:33:50
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Tem um FAQ sobre CoC... Dá uma olhada aí... Eu realmente não sei o que acontece aí...
Se não estiver funcionando vc vai ter que debugar o código do menta para entender o que vc está fazendo de errado...
Pra mim sempre funcionou sem problemas...
|
Sergio Oliveira
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 14:37:36
|
YkyMatt
Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline
|
saoj wrote:
Tem um FAQ sobre CoC... Dá uma olhada aí... Eu realmente não sei o que acontece aí...
Se não estiver funcionando vc vai ter que debugar o código do menta para entender o que vc está fazendo de errado...
Pra mim sempre funcionou sem problemas...
Eu já li o FAQ, tudo o que havia sobre CoC eu jpa li, hehehe.
Mas cara, alguma vez tu jpa precisastes implementar teu próprio CoCConsequenceProvider?
Quando será que o Boaglio vai acessar o fórum? Espero que seja logo, pq foi ele que redigiu a FAQ neh. oO
No final das contas ou vou ter que criar todos os Forward's manualmente ou deixar de usar template, hehe.
|
Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais
Mentawai Evangelist
http://www.chronusteam.com |
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 15:19:44
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Cara, te sugiro o seguinte:
- Baixa o jar beta e usa ele...
- Implementa ConsequenceProvider e faz os seus testes...
- Veja que eu uso direto InnerActionConsequenceProvider no MentaNews no FAQ....
- Implementar o seu próprio ConsequenceProvider é ridículo e funciona perfeitamente. O seu problema é outro, provavelmente relacionado com templetes...
- Faz a coisa devagar para assumir o controle da sua aplicação... Muita mágica tem vantagens e desvantagens: vantagem = produtividade / objetividade / pragramatismo ; desvantagem = vc pode querer que as coisas funcionem sem entende-la...
- Não foi o Boaglio que fez o CoC...
|
Sergio Oliveira
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 15:29:58
|
YkyMatt
Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline
|
saoj wrote:
Cara, te sugiro o seguinte:
- Baixa o jar beta e usa ele...
- Implementa ConsequenceProvider e faz os seus testes...
- Veja que eu uso direto InnerActionConsequenceProvider no MentaNews no FAQ....
- Implementar o seu próprio ConsequenceProvider é ridículo e funciona perfeitamente. O seu problema é outro, provavelmente relacionado com templetes...
- Faz a coisa devagar para assumir o controle da sua aplicação... Muita mágica tem vantagens e desvantagens: vantagem = produtividade / objetividade / pragramatismo ; desvantagem = vc pode querer que as coisas funcionem sem entende-la...
- Não foi o Boaglio que fez o CoC...
Beleza cara, vou dar uma olhada em InnerActionConsequenceProvider. Só vou discordar com você no que diz respeito a querer que as coisas funcionem sem entedê-las, pois eu procuro sempre tentar entender as classes que estou trabalhando, tanto que tenho salvas todas as páginas da FAQ e os artigos, além de estar com todo o source do Menta à mão, cujo acesso freqüentemente, pois gosto de saber como algumas coisas estão sendo implementadas.
Vou testar mais algumas possibilidades e alternativas e assim que tiver algum resultado posto novamente.
Mais uma vez obrigado pela atenção.
|
Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais
Mentawai Evangelist
http://www.chronusteam.com |
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 15:39:32
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
YkyMatt wrote:
Beleza cara, vou dar uma olhada em InnerActionConsequenceProvider. Só vou discordar com você no que diz respeito a querer que as coisas funcionem sem entedê-las, pois eu procuro sempre tentar entender as classes que estou trabalhando, tanto que tenho salvas todas as páginas da FAQ e os artigos, além de estar com todo o source do Menta à mão, cujo acesso freqüentemente, pois gosto de saber como algumas coisas estão sendo implementadas.
Eu entendo o seu lado, pois tem coisas que vc quer simplesmente que funcione. Essa é a filosofia do menta que nesse caso aqui falhou.
O que eu posso te garantir é que o ConsequenceProvider funciona perfeitamente. Agora quando vc mistura ele com templates (algo com o que eu não trabalho, não gosto e não entendo), aí eu já não sei o que pode acontecer...
|
Sergio Oliveira
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 15:56:55
|
YkyMatt
Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline
|
Cara, já estou utilizando o jar beta, já notei que foi passado o CoCAplicationManager de org.mentawai.core para org.mentawai.coc
Mas agora o ConsequenceProvider não tem mais o métiodo com assinatura:
getConsequence(String action, String result, String innerAction)
Agora é:
getConsequence(String, Class<? extends Object>, String, String)
Poderia me explicar o que são os parâmetros, por favor?
|
Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais
Mentawai Evangelist
http://www.chronusteam.com |
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 17:47:26
|
Lupos
![[Avatar]](/images/avatar/8dd48d6a2e2cad213179a3992c0be53c.jpg)
Joined: 19/04/2007 11:53:00
Messages: 75
Offline
|
Eu to usando CoC e template. Se eu não estou enganado acho q vc tá querendo o mesmo , pra mim tá funcionando legal, dá uma sacada no codigo.....
coloca Controller.setConsequenceProvider(new ConsequenceProvider()
ApplicationManager
Code:
public void init(Context application) {
Controller.setConsequenceProvider(new ConsequenceProvider() {
public Consequence getConsequence(String action, Class<? extends Object> actionClass, String result, String innerAction) {
StringBuffer sb = new StringBuffer(128);
sb.append("/").append("WEB-INF/jsp/").append("/");
sb.append(result).append(".page");
return new Forward(sb.toString());
}
} );
/////// etc ....
}
public void loadActions() {
ActionConfig ac = new ActionConfig("/MenuAction",MenuAction.class);
ac.addConsequence(SUCCESS,fwd("WEB-INF/jsp/template/body.page"));
ac.addConsequence(ERROR,fwd("WEB-INF/jsp/template/sempag.page"));
ac.addFilter(common);
addActionConfig(ac);
}
Sergio senão substitui jsp por page o template não funciona. , essa mistura ficou muito flexível, agora q entendo não vejo complicação alguma. tá muito simples. como é de praxe no menta
valeu.
|
|
|
 |
|