I tried using your hint by changing my template to the following:
<t:layout title="message:personDetail.title"
heading="message:personDetail.heading"
menu="literal:PersonMenu"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd
">
<t:messagebanner t:id="message" type="type"/>
<form t:id="personForm" clientValidation="true">
<t:errors/>
<div class="t-beaneditor">
<t:beaneditor t:id="person" object="person" exclude="id"/>
<div class="t-beaneditor-row" style="text-align: center">
<input type="submit" id="save"
value="message:button.save"/>
<input t:type="submit" t:id="delete" id="delete"
value="message:button.delete"/>
<input t:type="submit" t:id="cancel" id="cancel"
value="message:button.cancel"/>
</div>
</div>
</form>
<script type="text/javascript">
Form.focusFirstElement($("personForm"));
</script>
</t:layout>
Unfortunately, I still get the same error when trying to view this
page:
[exec] ERROR [btpool0-3] PersonForm.run(78) | Render queue
error in
AfterRender[PersonForm:person.loop]: Failure reading parameter
'validate'
of component core/PropertyEditBlocks:datefield: No object of type
org.apache.tapestry5.services.PropertyEditContext is available from
the
Environment. Available types are org.apache.tapestry5.RenderSupport,
org.apache.tapestry5.ValidationDecorator,
org.apache.tapestry5.ValidationTracker,
org.apache.tapestry5.internal.services.ClientBehaviorSupport,
org.apache.tapestry5.services.FormSupport,
org.apache.tapestry5.services.Heartbeat.
[exec] org.apache.tapestry5.ioc.internal.util.TapestryException:
Failure reading parameter 'validate' of component
core/PropertyEditBlocks:datefield: No object of type
org.apache.tapestry5.services.PropertyEditContext is available from
the
Environment. Available types are org.apache.tapestry5.RenderSupport,
org.apache.tapestry5.ValidationDecorator,
org.apache.tapestry5.ValidationTracker,
org.apache.tapestry5.internal.services.ClientBehaviorSupport,
org.apache.tapestry5.services.FormSupport,
org.apache.tapestry5.services.Heartbeat. [at
classpath:org/apache/tapestry5/corelib/components/BeanEditor.tml,
line 3,
column 47]
[exec] at
org
.apache
.tapestry5
.internal
.structure
.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:909)
[exec] at
org
.apache.tapestry5.internal.structure.ComponentPageElementImpl.access
$200(ComponentPageElementImpl.java:50)
[exec] at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl
$6.render(ComponentPageElementImpl.java:189)
[exec] at
org
.apache
.tapestry5
.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:68)
[exec] at
org
.apache
.tapestry5
.internal
.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:108)
[exec] at
$
PageRenderQueue_12104869ca2.render($PageRenderQueue_12104869ca2.java)
[exec] at
$
PageRenderQueue_12104869c9b.render($PageRenderQueue_12104869c9b.java)
[exec] at
org.apache.tapestry5.services.TapestryModule
$15.renderMarkup(TapestryModule.java:1128)
[exec] at
com.company.webapp.services.AppModule$1.renderMarkup(AppModule.java:
138)
Here is my PersonForm.java class:
package com.company.webapp.pages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Service;
import org.apache.tapestry5.corelib.components.EventLink;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.PersistenceConstants;
import org.appfuse.service.GenericManager;
import com.company.model.Person;
import org.slf4j.Logger;
import java.util.List;
public class PersonForm extends BasePage {
@Inject
private Logger log;
@Inject
@Service("personManager")
private GenericManager<Person, Long> personManager;
@Persist @Property
private Person person;
public Person getPerson() {
return person;
}
/**
* Allows setting person object from another class (i.e.
PersonList)
*
* @param person an initialized instance
*/
public void setPerson(Person person) {
this.person = person;
}
@InjectPage
private PersonList personList;
@Component(id = "personForm")
private Form form;
private boolean cancel;
private boolean delete;
void onValidateForm() {
if (!delete && !cancel) {
// manually validate required fields or annotate the
Person
object
/*if (foo.getProperty() == null ||
user.getProperty().trim().equals("")) {
form.recordError("Property is a required field.");
}*/
}
}
void onActivate(Long id) {
if (id != null) {
person = personManager.get(id);
}
}
Object onSuccess() {
if (delete) return onDelete();
if (cancel) return onCancel();
log.debug("Saving person...");
boolean isNew = (getPerson().getId() == null);
personManager.save(person);
String key = (isNew) ? "person.added" : "person.updated";
if (isNew) {
personList.addInfo(key, true);
return personList;
} else {
addInfo(key, true);
return this;
}
}
void onSelectedFromDelete() {
log.debug("Deleting person...");
delete = true;
}
void onSelectedFromCancel() {
log.debug("Cancelling form...");
cancel = true;
}
Object onDelete() {
personManager.remove(person.getId());
personList.addInfo("person.deleted", true);
return personList;
}
Object onCancel() {
return personList;
}
}
I've attached my project which you should be able to run with "mvn
jetty:run -Ph2". To reproduce, go to http://localhost:8080/
personform and
login with admin/admin.
Thanks,
Matt
Thiago H. de Paula Figueiredo wrote:
Em Sat, 02 May 2009 15:31:15 -0300, mraible <m...@raibledesigns.com>
escreveu:
I have the a Person.java object that I'm trying to use the
BeanEditForm
component with. It has no Tapestry annotations in it. Is it
possible to
use the BeanEditForm component with it?
Yes. By the way, I've never used any Tapestry annotation in my
POJOs.
<t:layout title="message:personDetail.title"
heading="message:personDetail.heading"
menu="literal:PersonMenu"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<t:beaneditform object="person" id="personForm" exclude="id">
<t:parameter name="buttons">
You're trying to override the edition block of a non-existent
BeanModel
property. Try adding add="buttons" to the BeanEditForm.
Hint: instead of using BeanEditForm in this case, use a Form, an
Errors
and a BeanEditor. You'll have complete control on how to add the
submit
input (and any other thing you need). BeanEditForm = Form + Errors +
BeanEditor + submit input.
--
Thiago H. de Paula Figueiredo
Independent Java consultant, developer, and instructor
http://www.arsmachina.com.br/thiago
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org