You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by yosemite <km...@hotmail.com> on 2008/12/04 09:13:48 UTC
ValueEncoder stopped working in 5.017
Hello,
the attached code worked fine in 5.011 but in 5.017 it blows up saying:
Render queue error in BeforeRenderTemplate[Index:select]: Failure reading
parameter 'encoder' of component Index:select: Could not find a coercion
from type org.example.myapp.util.IntegerEncoder to type
org.apache.tapestry5.ValueEncoder. Maybe I missed in version 5.017 the
encoder works different?
Any help really appreciated
Karel
---
index.tml:
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head><title>myapp Start Page</title></head>
<body>
<form t:id="form">
<h1>myapp Start Page</h1>
<p> This is the start page for this application, a good place to
start your modifications.
Just to prove this is live: </p>
<p> The current time is: ${currentTime}. </p>
<p>
[<t:pagelink t:page="Index">refresh</t:pagelink>]
</p>
<t:select t:value="year" t:model="yearModel" t:encoder="encoder" />
</form>
</body>
</html>
---
package org.example.myapp.pages;
import java.util.Calendar;
import java.util.Date;
import org.apache.tapestry5.SelectModel;
import org.apache.tapestry5.ValueEncoder;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.corelib.components.Form;
import org.example.myapp.util.IntegerEncoder;
import org.example.myapp.util.IntegerSelectModel;
public class Index {
@Component
private Form form;
private Calendar c = Calendar.getInstance();
public Date getCurrentTime() {
return new Date();
}
public int getYear() {
return c.get(Calendar.YEAR);
}
public SelectModel getYearModel() {
return (SelectModel) new IntegerSelectModel(1900, 2010);
}
public ValueEncoder getEncoder() {
return (ValueEncoder) new IntegerEncoder();
}
}
---
package org.example.myapp.services;
import java.io.IOException;
import org.apache.tapestry5.ioc.ServiceBinder;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.RequestFilter;
import org.apache.tapestry5.services.RequestHandler;
import org.apache.tapestry5.services.Response;
import org.slf4j.Logger;
public class AppModule {
public static void bind(ServiceBinder binder) {}
public RequestFilter buildTimingFilter(final Logger log) {
return new RequestFilter() {
public boolean service(Request request, Response response,
RequestHandler handler) throws IOException {
long startTime = System.currentTimeMillis();
try {
return handler.service(request, response);
} finally {
long elapsed = System.currentTimeMillis() - startTime;
log.info(String.format("Request time: %d ms", elapsed));
}
}
};
}
}
---
package org.example.myapp.util;
import org.apache.tapestry5.ValueEncoder;
public class IntegerEncoder implements ValueEncoder {
public String toClient(Object i) {
return i.toString();
}
public Object toValue(String s) {
return new Integer(s);
}
}
---
package org.example.myapp.util;
import java.util.Map;
import org.apache.tapestry5.OptionModel;
public class IntegerOptionModel implements OptionModel {
private Number number;
public IntegerOptionModel(Number num) {
number = num;
}
public Map<String, String> getAttributes() {
return null;
}
public String getLabel() {
return "" + number;
}
public Object getValue() {
return number;
}
public boolean isDisabled() {
return false;
}
}
---
package org.example.myapp.util;
import java.util.ArrayList;
import java.util.List;
import org.apache.tapestry5.OptionGroupModel;
import org.apache.tapestry5.OptionModel;
import org.apache.tapestry5.util.AbstractSelectModel;
public class IntegerSelectModel extends AbstractSelectModel {
private List<OptionModel> options = new ArrayList<OptionModel>();
public IntegerSelectModel(int numFrom, int numTo) {
int increment = numTo > numFrom ? 1 : -1;
for (int i = numFrom; i <= numTo; i += increment) {
options.add(new IntegerOptionModel(i));
}
}
public List<OptionGroupModel> getOptionGroups() {
return null;
}
public List<OptionModel> getOptions() {
return options;
}
}
---
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>myapp Tapestry 5 Application</display-name>
<context-param>
<!-- The only significant configuration for Tapestry 5, this informs
Tapestry
of where to look for pages, components and mixins. -->
<param-name>tapestry.app-package</param-name>
<param-value>org.example.myapp</param-value>
</context-param>
<filter>
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>app</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
--
View this message in context: http://www.nabble.com/ValueEncoder-stopped-working-in-5.017-tp20828992p20828992.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: ValueEncoder stopped working in 5.017
Posted by yosemite <km...@hotmail.com>.
Hello,
I have resolved by rebuilding the project using Maven, probably was a
classpath issue, no sure, glad it works now :-)
Karel
yosemite wrote:
>
> Hello,
> the attached code worked fine in 5.011 but in 5.017 it blows up saying:
> Render queue error in BeforeRenderTemplate[Index:select]: Failure reading
> parameter 'encoder' of component Index:select: Could not find a coercion
> from type org.example.myapp.util.IntegerEncoder to type
> org.apache.tapestry5.ValueEncoder. Maybe I missed in version 5.017 the
> encoder works different?
> Any help really appreciated
> Karel
> ---
> index.tml:
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> <head><title>myapp Start Page</title></head>
> <body>
> <form t:id="form">
> <h1>myapp Start Page</h1>
> <p> This is the start page for this application, a good place to
> start your modifications.
> Just to prove this is live: </p>
> <p> The current time is: ${currentTime}. </p>
> <p>
> [<t:pagelink t:page="Index">refresh</t:pagelink>]
> </p>
> <t:select t:value="year" t:model="yearModel" t:encoder="encoder" />
> </form>
> </body>
> </html>
> ---
> package org.example.myapp.pages;
> import java.util.Calendar;
> import java.util.Date;
> import org.apache.tapestry5.SelectModel;
> import org.apache.tapestry5.ValueEncoder;
> import org.apache.tapestry5.annotations.Component;
> import org.apache.tapestry5.corelib.components.Form;
> import org.example.myapp.util.IntegerEncoder;
> import org.example.myapp.util.IntegerSelectModel;
> public class Index {
> @Component
> private Form form;
> private Calendar c = Calendar.getInstance();
> public Date getCurrentTime() {
> return new Date();
> }
> public int getYear() {
> return c.get(Calendar.YEAR);
> }
> public SelectModel getYearModel() {
> return (SelectModel) new IntegerSelectModel(1900, 2010);
> }
> public ValueEncoder getEncoder() {
> return (ValueEncoder) new IntegerEncoder();
> }
> }
> ---
> package org.example.myapp.services;
> import java.io.IOException;
> import org.apache.tapestry5.ioc.ServiceBinder;
> import org.apache.tapestry5.services.Request;
> import org.apache.tapestry5.services.RequestFilter;
> import org.apache.tapestry5.services.RequestHandler;
> import org.apache.tapestry5.services.Response;
> import org.slf4j.Logger;
> public class AppModule {
> public static void bind(ServiceBinder binder) {}
> public RequestFilter buildTimingFilter(final Logger log) {
> return new RequestFilter() {
> public boolean service(Request request, Response response,
> RequestHandler handler) throws IOException {
> long startTime = System.currentTimeMillis();
> try {
> return handler.service(request, response);
> } finally {
> long elapsed = System.currentTimeMillis() - startTime;
> log.info(String.format("Request time: %d ms", elapsed));
> }
> }
> };
> }
> }
> ---
> package org.example.myapp.util;
> import org.apache.tapestry5.ValueEncoder;
> public class IntegerEncoder implements ValueEncoder {
> public String toClient(Object i) {
> return i.toString();
> }
> public Object toValue(String s) {
> return new Integer(s);
> }
> }
> ---
> package org.example.myapp.util;
> import java.util.Map;
> import org.apache.tapestry5.OptionModel;
> public class IntegerOptionModel implements OptionModel {
> private Number number;
> public IntegerOptionModel(Number num) {
> number = num;
> }
> public Map<String, String> getAttributes() {
> return null;
> }
> public String getLabel() {
> return "" + number;
> }
> public Object getValue() {
> return number;
> }
> public boolean isDisabled() {
> return false;
> }
> }
> ---
> package org.example.myapp.util;
> import java.util.ArrayList;
> import java.util.List;
> import org.apache.tapestry5.OptionGroupModel;
> import org.apache.tapestry5.OptionModel;
> import org.apache.tapestry5.util.AbstractSelectModel;
> public class IntegerSelectModel extends AbstractSelectModel {
> private List<OptionModel> options = new ArrayList<OptionModel>();
> public IntegerSelectModel(int numFrom, int numTo) {
> int increment = numTo > numFrom ? 1 : -1;
> for (int i = numFrom; i <= numTo; i += increment) {
> options.add(new IntegerOptionModel(i));
> }
> }
> public List<OptionGroupModel> getOptionGroups() {
> return null;
> }
> public List<OptionModel> getOptions() {
> return options;
> }
> }
> ---
> web.xml:
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE web-app
> PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
> "http://java.sun.com/dtd/web-app_2_3.dtd">
> <web-app>
> <display-name>myapp Tapestry 5 Application</display-name>
> <context-param>
> <!-- The only significant configuration for Tapestry 5, this
> informs Tapestry
> of where to look for pages, components and mixins. -->
> <param-name>tapestry.app-package</param-name>
> <param-value>org.example.myapp</param-value>
> </context-param>
> <filter>
> <filter-name>app</filter-name>
> <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
> </filter>
> <filter-mapping>
> <filter-name>app</filter-name>
> <url-pattern>/*</url-pattern>
> </filter-mapping>
> </web-app>
>
>
--
View this message in context: http://www.nabble.com/ValueEncoder-stopped-working-in-5.017-tp20828992p20939061.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org