Lucas_Cavalcanti 16 de out. de 2009
Olá,
porque você não está fazendo:
@Resource
public class UserMgrController {
@Path ( "/groupware-workbench/test/{idToolInstance}/userMgr" )
public void list () { ... }
}
É um jeito bem mais fácil de manter a aplicação depois…
Se você prefere fazer isso no RoutesConfiguration, use a classe para criar a rota:
routeFor("/groupware-workbench/test/{idToolInstance}/userMgr").is(UserMgrController.class).list();
o erro provavelmente é: se /groupware-workbench é seu context-path, ele não deve fazer parte da sua rota…
[]'s
gcclovecraft 16 de out. de 2009
Oi lucass …
O metodo que realmente desejo implementar é o seguente:
sendo que a variavel uri em cada iteração é:
“/groupware-workbench/test/{idToolInstance}/userMgr”
"/groupware-workbench/test/{idToolInstance}/roleMgr"
"/groupware-workbench/test/{idToolInstance}/toolMgr"
…
"/groupware-workbench/test/{idToolInstance}/testMgr"
public void config ( Router router ) {
new Rules ( router ) {
public void routes () {
for ( br . eg . groupwareComponentFwFw . facade . Component component : GroupwareRoutes . this . components ) {
CollabComponent collabComponent = ( CollabComponent ) component ;
String uri = collabComponent . getConfigurationURL (). replaceAll ( "\\$" , "" );
String controllerClass = collabComponent . getComponentInstanceClass (). replaceAll ( "Instance" , "Controller" );
routeFor ( uri ). is ( type ( controllerClass ), method ( "list" ));
routeFor ( uri + "/{id}" ). is ( type ( controllerClass ), method ( "retrieve" ));
}
}
};
}
P.D= disculpe se quiz simplificar o meu problema
Lucas_Cavalcanti 16 de out. de 2009
tudo bem fazer assim, mas qual URI vc tá chamando no browser?
algo como:
http://localhost:8080/groupware-workbench/test/1234/userMgr
??
se for, você tem que tirar o /groupware-workbench do começo das suas rotas, pois ele é o context-path, e ele não deve fazer parte das rotas
gcclovecraft 16 de out. de 2009
Oi lucas
As chamadas são :
http://localhost:8080/teste-vraptor3/groupware-workbench/test/12/userMgr
http://localhost:8080/teste-vraptor3/groupware-workbench/test/123/roleMgr
e dá o erro seguente:
SEVERE : Servlet . service () for servlet default threw exception
java . lang . NullPointerException
at java . lang . String . replace ( String . java : 2219 )
at br . com . caelum . vraptor . http . route . PatternBasedType . apply ( PatternBasedType . java : 80 )
at br . com . caelum . vraptor . http . route . PatternBasedStrategy . matches ( PatternBasedStrategy . java : 77 )
at br . com . caelum . vraptor . http . route . DefaultRouter . parse ( DefaultRouter . java : 113 )
at br . com . caelum . vraptor . http . DefaultResourceTranslator . translate ( DefaultResourceTranslator . java : 65 )
at br . com . caelum . vraptor . interceptor . ResourceLookupInterceptor . intercept ( ResourceLookupInterceptor . java : 64 )
at br . com . caelum . vraptor . core . ToInstantiateInterceptorHandler . execute ( ToInstantiateInterceptorHandler . java : 57 )
at br . com . caelum . vraptor . core . DefaultInterceptorStack . next ( DefaultInterceptorStack . java : 71 )
at br . com . caelum . vraptor . core . DefaultRequestExecution . execute ( DefaultRequestExecution . java : 71 )
at br . com . caelum . vraptor . VRaptor $1 . insideRequest ( VRaptor . java : 99 )
at br . com . caelum . vraptor . ioc . spring . SpringProvider . provideForRequest ( SpringProvider . java : 39 )
at br . com . caelum . vraptor . VRaptor . doFilter ( VRaptor . java : 97 )
O problema e que na URI eu precisso mandar {webLogic} e {webMethod} … para que o parametro Value no método PatternBasedType.apply não seja null
Lucas_Cavalcanti 16 de out. de 2009
é… pra usar desse jeito você precisaria usar o {webLogic} e {webMethod} dentro das strings…
de qualquer forma você pode fazer o seguinte:
String controllerClassName = ...;
Class <? > controllerClass = Class . forName ( controllerClassName );
Method listMethod = controllerClass . getDeclaredMethod ( "list" );
routeFor ( "...." ) . is ( controllerClass , listMethod );
ou algo parecido com isso…
esse código pode soltar várias exceções, mas você pode usar essa biblioteca que já é dependencia do vraptor pra deixar mais fácil:
http://projetos.vidageek.net/mirror-pt/
entendeu a idéia, ou quer que eu explique melhor?
gcclovecraft 16 de out. de 2009
Obrigado …lucas
no final ficou muito melhor com Mirror
public void config ( Router router ) {
new Rules ( router ) {
public void routes () {
for ( br . eg . groupwareComponentFwFw . facade . Component component : GroupwareRoutes . this . components ) {
//CollabComponent component ;
CollabComponent collabComponent = ( CollabComponent ) component ;
String uri = collabComponent . getConfigurationURL (). replaceAll ( "\\$" , "" );
String controllerClassName = collabComponent . getComponentInstanceClass (). replaceAll ( "Instance" , "Controller" );
Class <?> targetClass = new Mirror (). reflectClass ( controllerClassName );
Method method = new Mirror (). on ( controllerClassName ). reflect (). method ( "list" ). withArgs ( String . class );
routeFor ( uri ). with ( HttpMethod . GET ). is ( targetClass , method );
}
}
};
}
Lucas_Cavalcanti 16 de out. de 2009