You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by ramonchu <pb...@gmail.com> on 2012/05/10 13:18:21 UTC

Trouble related with beaneditform, beanmodel and propertyconduit

Hi everybody.

I'm trying to edit an entity via a beaneditform which has some other
entities inside. I'll write down a simple case so that it's easy to
understand the issue.

The tml file has the following line:




This object member is an EntityB object:

public class EntityB{
    private String sb;
    public String getSb() {return sb;}
    public void setSb(String sb) {this.sb = sb;}

    private EntityA ea;
    public EntityA getEa() {return ea;}
    public void setEa(EntityA ea) {this.ea = ea;}
}

EntityA is a simple class:

public class EntityA{
    private String s1;
    public String getS1() {return s1;}
    public void setS1(String s1) {this.s1 = s1;}

    private int i1;
    public int getI1() {return i1;}
    public void setI1(int i1) {this.i1 = i1;}
}

Finally, the page class has the following code:

	@Property
	private EntityB member;

	@Inject
	private BeanModelSource beanModelSource;
	@Inject
	private ComponentResources resources;

	public BeanModel getModel(){
		BeanModel result = beanModelSource.createEditModel(EntityB.class,
resources.getMessages());
		result.add("string1",new EntityBPropertyConduit1());
		return result;
		
	}


And the EntityBPropertyConduit1 class is as follows:

public class EntityBPropertyConduit1 implements PropertyConduit {

	@Override
	public Object get(Object instance) {
		EntityB myObject = (EntityB) instance;
		if(myObject.getEa()==null){
			return new String();
		}
		return myObject.getEa().getS1();
	}

	@Override
	public void set(Object instance, Object value) {
		EntityB myObject = (EntityB) instance;
		String myValue = (String) value;
		if(myObject.getEa()==null){
			myObject.setEa(new EntityA());
		}
		myObject.getEa().setS1(myValue);
	}

	@Override
	public Class getPropertyType() {
		return String.class;
	}

	@Override
	public <T extends Annotation> T getAnnotation(Class<T> arg0) {
		// TODO Auto-generated method stub
		return null;
	}
}


With all of this, I get the error 

The data type for property 'string1' of
project.example.entities.EntityB@21ec03 is null.


What am I missing?. I though once you give the beanmodel the
propertyconduit, it knows how to deal with the property...



--
View this message in context: http://tapestry.1045711.n5.nabble.com/Trouble-related-with-beaneditform-beanmodel-and-propertyconduit-tp5699891.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