Hi,all
I'd like to implement my own ServiceEncoder to make friendly url,In my
hivemind.xml,you can see:
....
<service-point id="ExternalEncoder"
interface="org.apache.tapestry.engine.ServiceEncoder">
<invoke-factory>
<construct class="com.test.tapestry.services.PageServiceEncoder">
<set property="serviceName" value="external"/>
<set property="extension" value="page"/>
</construct>
</invoke-factory>
</service-point>
.....
<contribution configuration-id="tapestry.url.ServiceEncoders">
<encoder id="external" object="service:ExternalEncoder"/>
............
</contribution>
This can work well in tapestry beta-10 or early version,but from beta-11 or
even RC2,I CANNOT do it successfully.
Following is the code for beta-11,it can generate friendly url,but problem
always exits when submitting form!
Could anybody help me?thanks in advance.
code:
public class PageServiceEncoder implements ServiceEncoder {
private String _extension;
private String _serviceName;
public void encode(ServiceEncoding encoding) {
String service = encoding.getParameterValue(ServiceConstants.SERVICE);
if (!service.equals(_serviceName))
return;
String pageName = encoding.getParameterValue(ServiceConstants.PAGE);
if (pageName.indexOf(INamespace.SEPARATOR) >= 0)
return;
StringBuffer buffer = new StringBuffer(encoding.getServletPath()).append
(pageName.substring(pageName.indexOf('/')))
.append('.').append(_extension);
encoding.setServletPath(buffer.toString());
encoding.setParameterValue(ServiceConstants.SERVICE, null);
encoding.setParameterValue(ServiceConstants.PAGE, null);
}
public void decode(ServiceEncoding encoding) {
String servletPath = encoding.getServletPath();
int dotx = servletPath.lastIndexOf('.');
if (dotx < 0)
return;
String extension = servletPath.substring(dotx + 1);
if (!extension.equals(_extension))
return;
String page = new StringBuffer(50).append("test").append
(servletPath.substring(servletPath.indexOf('/', 1), dotx)).toString();
encoding.setParameterValue(ServiceConstants.SERVICE, _serviceName);
encoding.setParameterValue(ServiceConstants.PAGE, page);
}
public void setExtension(String extension) {
_extension = extension;
}
public void setServiceName(String serviceName) {
_serviceName = serviceName;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]