Hi Henrik!

Yes, I'm using sessions (comes from the authentication).
But again - I'm doing nothing special - I just want a component
to set attributes of a domain-object with values from a form. The
object is provided by a parameter.

Normally the attributes can be bound to the form-fields.
But as I sayed my domain-object is immutable and the values
can only be provided in the constructor, so the typical mapping
is no solution - the domain-object has no setter-methods.
I just wanted to know if there is a simple solution to this?

For better understanding here some code:

--- page ---
class abstract MyPage extends BasePage {
 public abstract DomainObj getDomainObj();
 public abstract void setDomainObj(DomainObj obj);

 public void formSubmit() {
   DomainObj = getDomainObj();
   // .. work with it
 }
]

<form jwcid="@Form">
<span jwcid="@MyComponent" domainObj="ognl:domainObj" />
</form>

--- component ---
class abstract MyComponent extends BaseComponent {
 private String _v1, _v2;

 @Parameter(required=true)
 public abstract DomainObj getDomainObj();
 public abstract void setDomainObj(DomainObj obj);

 public String getValue1() { return v1; }
 public String getValue2() { return v2; }
 public void setValue1( String v1 ) { _value1 = v1; }
 public void setValue2( String v2 ) {
  _value1 = v2;
  // *** this here seems to be the problem
  setDomainObj( new DomainObj(_1v,_v2) );
 } 
}

 <span jwcid="@TextField" value="ognl:value1" />
 <span jwcid="@TextField" value="ognl:value2" />
---

This is really ugly, so is there a correct way to do that? Or is
it much more simple to wrap my immutable class in one that has
setters for attributes?

thx
lukas


Am Samstag, 1. Juli 2006 12:45 schrieb hv @ Fashion Content:
> Hmm, could you describe the situation a bit more. Are you using sessions or
> not ?
> It sounds like you are trying to break the encapsulation of the component.
> Are you looking to have an object attached to the page which is accessed by
> the component
> and presented as a component getter ?
> I can't think of why you would want to do that.
>
> But if you really want to do it, provide the page property as a parameter
> of the component.
>
> Henrik
>
> "Lukas Ruetz" <[EMAIL PROTECTED]> skrev i en meddelelse
> news:[EMAIL PROTECTED]
>
> > Hello!
> >
> > My current side-effect is, that I get the correct (posted) binding-value
> > in my page-code only _once_! If I read the abstract getter a second time
> > (still in the same request-cycle) I get an old value from a previous
> > page-submit (a different page)!
> >
> > I want to have something like this:
> > page -> binding (1 object) -> myComponent -> some properties ->
> > form-fields
> >
> > I have already heard of side-effects if the property getters/setters
> > are not managed by tapestry (abstract methods). Currently I have
> > implemented the property-setters (in the component) my own to be able
> > to create the resulting object out of the different (posted) form-fields.
> > I can't use the usual mapping from domain-object-attributes to
> > form-fields because the used class is immutable and the values can
> > only be provided in the constructor.
> >
> > So my question is - Where to put the code that creates my resulting
> > (immutable) object if I have to use abstract property-setters?
> > Or is the only solution to use the typical approach and a class that
> > just transports the values?
> >
> > thanks
> > lukas

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to