Hi Geoff,

Thanks for your reply to a very basic approach, I use it now in the absence
of a better solution.
some replies below:


Geoff Callender-2 wrote:
> 
> Hi Angelo,
> 
> A few concerns - none of them to do with Tapestry.
> 
> - The page is combining business logic with presentation logic rather  
> than calling a service or a DAO.
> - It allows creation of a cat in an incomplete state ie. no gender or  
> name.
> - It uses neither optimistic nor pessimistic locking.
> <ac> the locking will be an issue during save, I have not yet looked into
> this, maybe Hibernate will take care of that ?
> 
> None of these is an issue if it's for a simple single-user filing  
> system, but they could all be issues in a multi-user business system.
> 
> <ac> I believe that's a problem, however considering the 'detached' nature
> of web application, the window for that conflict is relatively low, maybe
> user can live with occasional exceptions until a better solution is found?
> 
> Actually, one Tapestry concern:
> 
> - whenever there's an error, cat is being loaded twice, because  
> onActivate() is called before and after onValidate().
> <ac> yes, that will be loaded twice, but the second time is not being
> used, it's simply a useless loading, it does not affect the operation, I
> think. 
> 
> T5's request/render mechanism works very well when there is no form
> involved, when the form is there, confusion starts, i believe, it's a
> matter of finding a way to use it properly, thanks.
> 
> A.C.
> 
> HTH,
> 
> Geoff
> 
> On 28/11/2007, at 1:36 PM, Angelo Chen wrote:
> 
>>
>> Hi,
>> I have been trying to find a best practice for tapestry-hibernate,  
>> looks
>> like there is none yet, here is an approach that I would do if the  
>> tools
>> were still dbase/Clipper at this time, very old fashion, but seems  
>> working,
>> no issue at all with @Persist, detached objects, any comments?
>>
>> public class TestCat {
>>
>>    private Cat cat;
>>    public String getName() { return cat.getName();}
>>    public void setName(String name) { cat.setName(name);}
>>    public String getGender() { return cat.getGender(); }
>>    public void setGender(String gender) {cat.setGender(gender);}
>>
>>    String onSuccess(String id2) {
>>        if (catid == -1)
>>            _session.persist(cat);
>>        else {
>>            Cat oldCat = (Cat) _session.load(Cat.class, catid);
>>            oldCat.setGender(cat.getGender());
>>            oldCat.setName(cat.getName());
>>        }
>>        return null;
>>    }
>>
>>    @Component
>>    private Form myForm;
>>
>>    public void onValidate(String id) throws EncoderException {
>>        if (!cat.getGender().equals("m"))
>>            myForm.recordError("we are looking for male cat only");
>>    }
>>
>>    @Inject private Session _session;
>>
>>    private Long catid;
>>
>>    public void onActivate(Long id) {
>>        catid = id;
>>        cat = new Cat(); // set up a buffer for editing
>>        if (id > 0) {  // copy contents, this might be a waste of cpu
>> resources, but life is easier
>>            Cat oldCat = (Cat) _session.load(Cat.class, id);
>>            cat.setGender(oldCat.getGender());
>>            cat.setName(oldCat.getName());
>>        }
>>    }
>>
>>    public Long onPassivate() { return catid; }
>> }
>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/T5%3A-CRUD-basic-practice--tf4885903.html#a13984740
>> Sent from the Tapestry - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/T5%3A-CRUD-basic-practice--tf4885903.html#a13993908
Sent from the Tapestry - User mailing list archive at Nabble.com.


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

Reply via email to