Hi Scott,
It is interesting this is possible, however, I see this example more as
a good illustration of why the approach of 'everything in one file' is
not a good idea. I think it is ugly and not readable, and will impact
maintainability negatively. Furthermore, it is solving a 'problem' that
imho is not a real problem. Spindle will let me jump between the parts
of a component quite easily and that is all I need. All aspects of a
component have their own file which makes things much simpler.
Cheers, Luc.
Scott F. Walter wrote:
Using Tapestry 4 beta, I was successfully able to create a standard page
(which has validation with custom delegate) in Tapestry using
annotations. I was then able to delete my page specification file.
Will I remove all page specification files from my applications?
Probably not, I will take it case by case. I will definetly be marking
persistent fields as well as assets as annotations. Components will be
another story, based on their complexity. Below is an example of
having a page without a page specifcation file (I have included the
contents of the page specification file in comments for comparison):
public abstract class DataEntry extends BasePage implements
PageRenderListener{
/** Creates a new instance of Home */
public DataEntry() {
}
@InjectState("visit")
public abstract Visit getVisitObject();
@InjectState("global")
public abstract Global getGlobalObject(); /*
<bean name="delegate"
class="com.scottwalter.sandbox.tapestry4.MyDelegate" property="delegate"/>
*/
@Bean
public abstract MyDelegate getDelegate();
public void pageBeginRender(PageEvent event) {
if(getPerson()==null) {
System.out.println("creating new person");
Person p = new Person();
p.setFirstName("Scott");
p.setLastName("Walter");
setPerson(p);
}
} @Persist
public abstract Person getPerson();
public abstract void setPerson(Person p);
/*
<component id="firstNameField" type="TextField">
<binding name="value" value="ognl:person.firstName"/>
<binding name="validators" value="required,minLength=3,myname"/>
<binding name="displayName" value="First Name"/>
</component>
*/
@Component( id="firstNameField", type = "TextField",
bindings = { "value = ognl:person.firstName",
"displayName = First Name",
"validators = required,minLength=3,myname"
}) public abstract TextField
getFirstNameField();
/*
<component id="lastNameField" type="TextField">
<binding name="value" value="ognl:person.lastName"/>
<binding name="validators"
value="required,minLength=3,lastnamer=walter"/>
<binding name="displayName" value="Last Name"/>
</component>
*/
@Component( id="lastNameField", type = "TextField",
bindings = { "value = ognl:person.lastName",
"displayName = Last Name",
"validators = required,minLength=3"
})
public abstract TextField getLastNameField();
/*
<component id="ageField" type="TextField">
<binding name="value" value="ognl:person.age"/>
<binding name="translator" value="number,pattern=#"/>
<binding name="displayName" value="Age"/>
<binding name="validators" value="required,min=0,max=120"/>
</component>
*/
@Component( id="ageField", type = "TextField",
bindings = { "value = ognl:person.age",
"translator = number,pattern=#",
"displayName = Your Age",
"validators = required,min=5,max=10"
}) public abstract TextField getAgeField();
public void doForm() { }
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]