[prev in list] [next in list] [prev in thread] [next in thread] 

List:       tapestry-dev
Subject:    [jira] [Commented] (TAP5-2255) Form and BeanEditForm differ in JSR-303 detection
From:       "Thiago H. de Paula Figueiredo (JIRA)" <jira () apache ! org>
Date:       2014-05-31 4:04:01
Message-ID: JIRA.12683329.1386510116151.52479.1401509041866 () arcas
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/TAP5-2255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14014502#comment-14014502 \
] 

Thiago H. de Paula Figueiredo commented on TAP5-2255:
-----------------------------------------------------

Geoff, could you please test this again? There was a fix in tapestry-beanvalidator \
that may have fixed this issue.

> Form and BeanEditForm differ in JSR-303 detection
> -------------------------------------------------
> 
> Key: TAP5-2255
> URL: https://issues.apache.org/jira/browse/TAP5-2255
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-beanvalidator, tapestry-core
> Affects Versions: 5.4
> Reporter: Geoff Callender
> 
> I have an entity field that the getter and setter convert between types (field is \
> Date, getter and setter convert from/to JodaTime's DateMidnight).  Form detects \
> @NotNull on the field, but BeanEditForm doesn't. BeanEditForm detects @NotNull on \
> the getter, but Form doesn't. So I have to provide @NotNull on the field AND the \
> getter. Shouldn't Form and BeanEditForm behave the same? For example, a snippet \
> from an entity: @Entity
> public class DatesExample implements Serializable {
> 	// This JSR-303 validation will be picked up by Form.
> 	@NotNull
> 	private java.sql.Date aDateMidnight;
> 	// This JSR-303 validation will be picked up by BeanEditForm.
> 	@NotNull
> 	public DateMidnight getADateMidnight() {
> 		return JodaTimeUtil.toDateMidnight(aDateMidnight);
> 	}
> 	public void setADateMidnight(DateMidnight dm) {
> 		this.aDateMidnight = JodaTimeUtil.toSQLDate(dm);
> 	}
> }
> I've contributed type coercers in AppModule:
> public static void contributeTypeCoercer(Configuration<CoercionTuple> \
> configuration) { // From java.util.Date to DateMidnight
> Coercion<java.util.Date, DateMidnight> toDateMidnight = new \
> Coercion<java.util.Date, DateMidnight>() { public DateMidnight \
> coerce(java.util.Date input) { // TODO - confirm this conversion always works, esp. \
> across timezones return JodaTimeUtil.toDateMidnight(input);
> }
> };
> configuration.add(new CoercionTuple<>(java.util.Date.class, DateMidnight.class, \
> toDateMidnight)); // From DateMidnight to java.util.Date
> Coercion<DateMidnight, java.util.Date> fromDateMidnight = new \
> Coercion<DateMidnight, java.util.Date>() { public java.util.Date \
> coerce(DateMidnight input) { // TODO - confirm this conversion always works, esp. \
> across timezones return JodaTimeUtil.toJavaDate(input);
> }
> };
> configuration.add(new CoercionTuple<>(DateMidnight.class, java.util.Date.class, \
> fromDateMidnight)); }
> and I've contributed an editor:
> public static void contributeBeanBlockSource(Configuration<BeanBlockContribution> \
> configuration) { configuration.add(new EditBlockContribution("dateMidnight", \
> "infra/AppPropertyEditBlocks", "dateMidnight")); }
> Here is the editor:
> <t:container xml:space="default" \
> xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"> <t:block \
> id="dateMidnight"> <t:label for="dateMidnight"/>
> <input t:id="dateMidnight" t:type="DateField" value="context.propertyValue" \
> label="prop:context.label"  format="prop:dateInputFormat" \
> translate="prop:dateMidnightTranslator" validate="prop:dateMidnightValidator"  \
> clientId="prop:context.propertyId" annotationProvider="context"/> </t:block>
> </t:container>
> public class AppPropertyEditBlocks {
> @Property
> @Environmental
> private PropertyEditContext context;
> @Component
> private DateField dateMidnight;
> @Component
> private DateField localDate;
> 
> public DateFormat getDateInputFormat() {
> return new SimpleDateFormat("dd MMMM yyyy");
> }
> 
> public FieldTranslator<?> getDateMidnightTranslator() {
> return context.getTranslator(dateMidnight);
> }
> 
> public FieldValidator<?> getDateMidnightValidator() {
> return context.getValidator(dateMidnight);
> }
> }



--
This message was sent by Atlassian JIRA
(v6.2#6252)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic