Ok, I still would like Steve's input on this one.
How should we do this?
~Lincoln
On Wed, Nov 9, 2011 at 8:48 AM, Richard Kennard <
richard(a)kennardconsulting.com> wrote:
Sorry, bad example. I meant more like:
#{customerBean.customer.address}
So originally the Forge scaffolding did this:
public class CustomerBean
...
private Customer customer = new Customer();
...
}
So at construction time, basically. This pattern would need extending:
public class CustomerBean extends PersistenceUtil implements MenuItem {
...
private Customer customer;
...
public CustomerBean() {
customer = new Customer();
customer.setAddress( new Address() );
}
...
}
On 9/11/2011 6:02 PM, Lincoln Baxter, III wrote:
> It looks like, from this thread, the view layer is accessing an entity
directly via "#{customer}" - this is not a good practice in general,
however, if
> it is to be done, then what needs to happen, I think, is that "Customer"
be initialized in whatever method is producing it.
>
> I've copied Steve Ebersole because he is probably the best person to
answer this question (I hope this is OK Steve. We want to get this stuff
right in
> Forge.)
>
> E.g:
>
> @Produces
> @Named("customer")
> public Customer getCustomer()
> {
> if(customer == null)
> {
> customer = new Customer();
> customer.setAddress(new Address());
> }
> }
>
> Is this on the same page? I don't think doing this in the Entity itself
is correct. Thoughts?
> ~Lincoln
>
> On Wed, Nov 9, 2011 at 7:23 AM, Jason Porter <lightguard.jp(a)gmail.com<mailto:
lightguard.jp(a)gmail.com>> wrote:
>
> If Seam Faces or PrettyFaces is being used then their view action
ability would be used. If vanilla JSF is being used, then we need to figure
out the
> best way to make this happen, which it looks like isn't all that
easy :(
>
> The idea is in the method would set a new instance of Address on the
class so it's instantiated when the user goes to fill it out. Of course if
> things aren't filled out then you'd have an empty address instance
persisted, could be good or bad, that really depends on the app.
>
> I know that's a fairly simplistic explanation, but it is the high
level idea. Did it come across clearly?
>
>
> On Tue, Nov 8, 2011 at 22:27, Richard Kennard <
richard(a)kennardconsulting.com <mailto:richard@kennardconsulting.com>>
wrote:
>
> Jason,
>
> Okay agreed. Could you explain how you would see the 'view
action' approach working?
>
> Richard.
>
> On 9/11/2011 4:24 PM, Jason Porter wrote:
> > It may boil down to which way we believe is the "correct"
way.
For all of the Forge plugins we've been trying to have then generated code
use
> best practices.
> >
> > This helps lessen support as hopefully, the patterns will be
repeated and they'll be done correctly with fewer bugs. This approach also
helps
> to educate people, though we could certainly do a better job at
that by documenting why Forge is generating code a certain way.
> >
> > I suggested my proposal as I view this as an interaction
problem with the persistence model, not a problem with that model.
Therefore, my
> solution kept the fix closer to the problem, or at least as I
see it, it does :)
> >
> > However, I'm not tied to a particular solution and could be
persuaded to others. I think some more discussion will provide a good
approach.
> >
> > Sent from my iPhone
> >
> > On Nov 8, 2011, at 22:15, Richard Kennard <
richard(a)kennardconsulting.com <mailto:richard@kennardconsulting.com>>
wrote:
> >
> >> I don't believe it will upset JPA, no. It *would* if you did:
> >>
> >> public Address getAddress() {
> >> if ( this.address == null ) { this.address = new
Address(); }
> >> return address;
> >> }
> >>
> >> Because JPA will call setAddress(null) and then getAddress()
and get back a different result. But if the field is just initialised to a
> default value...
> >>
> >> private Address address = new Address();
> >>
> >> ...then JPA will overwrite it with setAddress(null) and it'll
be okay.
> >>
> >> But sure, if there is a nicer way to do it I don't mind doing
it a different way?
> >>
> >> Richard.
> >>
> >> On 9/11/2011 4:11 PM, Jason Porter wrote:
> >>> Won't this cause issues with the JPA impl? From my
conversations with the Hibernate devs if what is returned from the property
(getter/field)
> is not what was set by JPA then extra db actions are performed.
> >>>
> >>> IMO, this an integration point for the JSF or EL specs. I
think, though, this is an instantiation issue and should be done with a
view action
> instead.
> >>>
> >>> Sent from my iPhone
> >>>
> >>> On Nov 8, 2011, at 21:37, Richard Kennard <
richard(a)kennardconsulting.com <mailto:richard@kennardconsulting.com>>
wrote:
> >>>
> >>>> Hi guys,
> >>>>
> >>>> As you're probably aware, in JSF if I do...
> >>>>
> >>>> #{customer}
> >>>>
> >>>> ...then a Customer object will get instantiated 'just
in
time'. But if I do...
> >>>>
> >>>> #{customer.address.street}
> >>>>
> >>>> ...then 'address' will *not* get instantiated just
in time.
So if you use Forge to do...
> >>>>
> >>>> entity --named Customer
> >>>> field custom --named address
> >>>> [what custom type m'lord?] com.test.domain.Address
> >>>>
> >>>> Then although you'll get a UI that includes a Customer
with
an embedded Address, it'll fail as soon as you try to save. There isn't a
very
> good solution to
> >>>> this, so can I suggest the simplest?
> >>>>
> >>>> When Forge generates field/getter/setter for a custom type
(possibly limited to the project's domain package), could it do:
> >>>>
> >>>> @Column
> >>>> private Address address *=new Address();*
> >>>>
> >>>> public Address getAddress() {
> >>>> return this.address;
> >>>> }
> >>>>
> >>>> public void setAddress(final Address address) {
> >>>> this.address = address;
> >>>> } }
> >>>>
> >>>> _______________________________________________
> >>>> forge-dev mailing list
> >>>> forge-dev(a)lists.jboss.org
<mailto:forge-dev@lists.jboss.org
>
> >>>>
https://lists.jboss.org/mailman/listinfo/forge-dev
> >>> _______________________________________________
> >>> forge-dev mailing list
> >>> forge-dev(a)lists.jboss.org
<mailto:forge-dev@lists.jboss.org>
> >>>
https://lists.jboss.org/mailman/listinfo/forge-dev
> >>>
> >>>
> >> _______________________________________________
> >> forge-dev mailing list
> >> forge-dev(a)lists.jboss.org <mailto:forge-dev@lists.jboss.org>
> >>
https://lists.jboss.org/mailman/listinfo/forge-dev
> > _______________________________________________
> > forge-dev mailing list
> > forge-dev(a)lists.jboss.org <mailto:forge-dev@lists.jboss.org>
> >
https://lists.jboss.org/mailman/listinfo/forge-dev
> >
> >
>
> _______________________________________________
> forge-dev mailing list
> forge-dev(a)lists.jboss.org <mailto:forge-dev@lists.jboss.org>
>
https://lists.jboss.org/mailman/listinfo/forge-dev
>
>
>
>
> --
> Jason Porter
>
http://lightguard-jp.blogspot.com
>
http://twitter.com/lightguardjp
>
> Software Engineer
> Open Source Advocate
> Author of Seam Catch - Next Generation Java Exception Handling
>
> PGP key id: 926CCFF5
> PGP key available at:
keyserver.net <
http://keyserver.net>,
pgp.mit.edu <
http://pgp.mit.edu>
>
> _______________________________________________
> forge-dev mailing list
> forge-dev(a)lists.jboss.org <mailto:forge-dev@lists.jboss.org>
>
https://lists.jboss.org/mailman/listinfo/forge-dev
>
>
>
>
> --
> Lincoln Baxter, III
>
http://ocpsoft.com
>
http://scrumshark.com
> "Keep it Simple"
>
>
> _______________________________________________
> forge-dev mailing list
> forge-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/forge-dev
_______________________________________________
forge-dev mailing list
forge-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/forge-dev