I use a UI(WX) to redirect the application to UI_TK(${URI}/TK?agent=${agent.id}) and UI_Reg(${URI}/Reg?code=${code}) based on some incoming parameters.
[code]
class WX extends UI {
@Override
protected void init(VaadinRequest request) {
......
if(currentUser.isAuthenticated()){
…
getPage().setLocation(“${URI}/TK?agent=${agent.id}”)
}else{
…
getPage().setLocation(“${URI}/Reg?code=${code}”)
}
…
}
}
[/code]The servlet code is here:
class IncanaServlet extends TouchKitServlet {
Log log = LogFactory.getLog(this.class)
@Override
protected void servletInitialized() throws ServletException {
super.servletInitialized()
getService().addSessionInitListener(new SessionInitListener() {
@Override
public void sessionInit(SessionInitEvent event) {
event.getSession().addBootstrapListener(new BootstrapListener(){
@Override
public void modifyBootstrapPage(BootstrapPageResponse response) {
......//Generate some element to add to body
VaadinRequest vr = getService().getCurrentRequest()
String URL = vr.getRequestURL().toString()
//URI will be TK for register and Product for buying
String URI = vr.getRequestURI()
String query = vr.getQueryString()
........//Generate some element to add to body
body.append(......)//Add the html element
}
@Override
public void modifyBootstrapFragment(BootstrapFragmentResponse response) {
}
})
}
})
}
When in Vaadin 7.4.7
The log shows the sessionInit is called after getPage().setLocation(“${URI}/TK?agent=${agent.id}”) and
before
the UI_TK is loaded.
- load UI_WX
- load SessionInitListener(
vr.getQueryString() is right)
- load UI_TK
When in Vaadin 7.5.2
The log shows the sessionInit will be called 2 or 3 seconds later after getPage().setLocation(“${URI}/TK?agent=${agent.id}”) and
after
the UI_TK is loaded.
- load UI_WX
- load UI_TK
- (2 or 3 seconds later)load SessionInitListener(
vr.getQueryString() is empty
)
Which means the SessionInitListener can not get the real QueryString(): String query = vr.getQueryString()
I try several times and I think the only reason is the version of Vaadin!