Ok now it's working.
My mapper looks like this.
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.handler.PageProvider;
import org.apache.wicket.request.handler.RenderPageRequestHandler;
import org.apache.wicket.request.mapper.AbstractComponentMapper;
import org.apache.wicket.util.string.Strings;
public class DetailMovedPageMapper extends AbstractComponentMapper {
private static final boolean CASE_INSENSITIVE = false;
public static final String MOUNT_PATH = "ShowDetailPage";
public DetailMovedPageMapper() {
super();
}
@Override
public int getCompatibilityScore(Request request) {
String path = request.getUrl().getPath();
if (Strings.startsWith(path, getMountPath(), CASE_INSENSITIVE)) {
String remainder = path.substring(getMountPath().length());
if
(remainder.matches("(^\\.html$)|(^-ii\\d*\\.html$)|(^-ti\\d*-.*\\.html$)|(^-ti\\d*-ii\\d*-.*\\.html$)"))
{
return Integer.MAX_VALUE;
}
}
return -1;
}
private String getMountPath() {
return MOUNT_PATH;
}
@Override
public IRequestHandler mapRequest(Request request) {
Url url = request.getUrl();
if (url != null && url.getPath().startsWith(getMountPath())) {
return new RenderPageRequestHandler(new
PageProvider(DetailMovedPage.class, extractPageParameters(request, 0,
new DetailMovedPageParametersEncoder())));
}
return null;
}
@Override
public Url mapHandler(IRequestHandler requestHandler) {
// This is special for my usecase because i immidiatly redirect
this call
// and i think i don't have to render an url for this component.
return null;
}
}
In Application.init i've added the mapper
getRootRequestMapperAsCompound().add(new DetailMovedPageMapper());
Thanks
Mike
You need to setup it as root mapper. This way it will be asked first
to map the request.
On Tue, Sep 6, 2011 at 10:16 AM, Mike Mander<[email protected]> wrote:
Sorry Martin, but i don't get it to work.
I wrote a mapper:
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.handler.BookmarkablePageRequestHandler;
import org.apache.wicket.request.handler.PageProvider;
import org.apache.wicket.request.mapper.AbstractComponentMapper;
import org.apache.wicket.util.string.Strings;
public class DetailMovedPageMapper extends AbstractComponentMapper {
private static final boolean CASE_INSENSITIVE = false;
public static final String MOUNT_PATH = "ShowDetailPage";
public DetailMovedPageMapper() {
super();
}
@Override
public int getCompatibilityScore(Request request) {
String path = request.getUrl().getPath();
if (Strings.startsWith(path, getMountPath(), CASE_INSENSITIVE)) {
String remainder = path.substring(getMountPath().length());
if
(remainder.matches("(^\\.html$)|(^-ii\\d*\\.html$)|(^-ti\\d*-.*\\.html$)|(^-ti\\d*-ii\\d*-.*\\.html$)"))
{
return Integer.MAX_VALUE;
}
}
return -1;
}
private String getMountPath() {
return MOUNT_PATH;
}
@Override
public IRequestHandler mapRequest(Request request) {
return new BookmarkablePageRequestHandler(new
PageProvider(DetailMovedPage.class, extractPageParameters(request, 0, new
DetailMovedPageParametersEncoder())));
}
@Override
public Url mapHandler(IRequestHandler requestHandler) {
return null;
}
}
But if i add it in Application.init (mount(new DetailMovedPageMapper());)
and call the homepage
nothing is displayed (blank page, no markup, no exception or log entry).
What i try to do is simply map a call of
localhost:8080/ShowDetailPage-ti123-ii456.html
to DetailPageMoved(PageParameters[ti=123, ii=456]).
Mike
Thanks Martin,
the parameters are the appendixes to page name (-ti123-ki345-ii789).
So i think i have to provide and encoder.
Cheers
Per
Yes, you need a custom IRequestMapper. You need to set it as root
mapper (see HttpsMapper and CryptoMapper examples).
You don't need custom IPageParametersEncoder unless you encode the
parameters in a special way. The url you showed below has no
parameters at all.
On Sat, Sep 3, 2011 at 5:25 PM, Per Newgro<[email protected]> wrote:
Hi,
we have some urls like in following pattern
http://domain.de/ShowTheme-ti123-ki345-ii789.html
With wicket 1.4 we built a
BookmarkablePageRequestTargetUrlCodingStrategy
with matches(path) based on a pattern and encoding / decoding the url /
parameters.
Now i'm not sure how i have to migrate that to wicket 1.5.
I think i have to provide a IRequestMapper.
Is the getCompatibilityScore method the "equivalent" of matches(path)?
Do i have to provide a custom IPageParametersEncoder to encode / decode
my
url / parameters?
Thanks for clearification
Per
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]