getModel() i agree, but getModelObject() is something that is used the most if i have to guess.
Because in an onSubmit() of a form or a onClick of a Link what do most of you do? onSubmit() { dao.save(getModelObject()) } onClick() { dao.delete(getModelObject()) } johan On Thu, May 22, 2008 at 10:05 AM, Matej Knopp <[EMAIL PROTECTED]> wrote: > Although I'm not sure how many people call getModel/getModelObject > anyway. I think it's mostly about ListItems etc an i doubt anyone > would subclass it just because of getModel/getModelObject... > > -Matej > > On Thu, May 22, 2008 at 10:04 AM, Matej Knopp <[EMAIL PROTECTED]> > wrote: > > I would all be easier if getModel() and getModelObject() weren't > > final. (I know there's a reason why they are, I'm not questioning it). > > > > Then in your component subclass you coud do IModel<Integer> getModel() > > { return (IModel<Integer>)super.getModel() }, similiar with > > getmodelobject so you wouldn't have casts all over places and it would > > be safer too). > > > > -Matej > > > > On Thu, May 22, 2008 at 9:39 AM, Johan Compagner <[EMAIL PROTECTED]> > wrote: > >> It isnt all or nothing.. i never said that > >> > >> I just say if you dont want Component but you do want IModel > >> then you will get a warning at getModel() > >> we as a framework shouldnt hide the warning at that call. > >> > >> But i am also curious how many people get really the model back from a > >> component (not counting specific places like repeaters.onpopuplate) > >> > >> because i think most people do component.getModelObject() which then > needs a > >> cast > >> > >> But i like that extra helper method way more then having an extra > >> getUnsafeModel() method.. > >> because thats explicit a developer has to really choose for it. > >> > >> i think there are 3 options > >> > >> 1> keep it what we have now, tweak it with the feedback we get from > 1.4M2 > >> 2> drop it on Component only and have a class like you described above > to do > >> this: IModel<String> model = Unsafe.cast(component.getModel()); (its > still > >> a hack and a sense of false security but ok. if people really want > this..) > >> 3> drop it on Component and Model > >> > >> > >> i am +1 on 1 > >> and -0 on 2 and 3 > >> > >> I still think it is not bad. and you can come around it really easy by > just > >> creating a few extra classes like > >> > >> StringLabel > >> NumberLabel > >> StringTextField > >> NumberTextField > >> > >> if you only have a few of those extra all your code is cleanup > >> > >> johan > >> > >> On Thu, May 22, 2008 at 9:12 AM, Joni Freeman <[EMAIL PROTECTED]> > wrote: > >> > >>> Yeah, it could even be in its separate utility class: > >>> > >>> interface IModel<T> {} > >>> > >>> class Component { > >>> private IModel<?> model; > >>> > >>> public IModel<?> getModel() { > >>> return model; > >>> } > >>> } > >>> > >>> public class Unsafe { > >>> public static <T> IModel<T> cast(IModel<?> model) { > >>> return (IModel<T>) model; > >>> } > >>> } > >>> > >>> class MyComp extends Component { > >>> public MyComp() { > >>> IModel<Integer> model = Unsafe.cast(getModel()); > >>> } > >>> } > >>> > >>> I'm merely pointing out that there exists a solution to do unsafe cast > >>> without getting compiler warning. Just like normal casts are handled. > >>> > >>> I don't think Johan's all or nothing proposition is very pragmatic one. > >>> Without generic IModel we do not get any API discoverability and our > >>> APIs continue to suck. For instance, how can API user know what kind of > >>> model this needs: MyJuicyComponent(String id, IModel model). At one > >>> point we did this: MyJuicyComponent(String id, IModel/*<Chocolate>*/ > >>> model) but this convention is far from optimal. To be sure, one needs > to > >>> browse the sources... > >>> > >>> Joni > >>> > >>> On Wed, 2008-05-21 at 22:19 +0200, Matej Knopp wrote: > >>> > Well, maybe it really is a hack that's too ugly. We might have two > >>> methods, > >>> > > >>> > default getModel() that doesn't cast it and alternative convenience > >>> > one that does. > >>> > > >>> > -Matej > >>> > > >>> > On Wed, May 21, 2008 at 10:10 PM, Matej Knopp <[EMAIL PROTECTED] > > > >>> wrote: > >>> > > class Component { > >>> > > private IModel<?> model; > >>> > > > >>> > > public <T> IModel<T> getModel() { > >>> > > return (IModel<T>) model; > >>> > > } > >>> > > } > >>> > > > >>> > > I like this. Even with the possible class cast exception. Because > >>> > > without generics, it doesn't leave you no other option than to cast > it > >>> > > to your model, which isn't much better either, as you get the same > >>> > > result except that it looks uglier. > >>> > > > >>> > > -Matej > >>> > > > >>> > > On Wed, May 21, 2008 at 10:07 PM, Johan Compagner < > >>> [EMAIL PROTECTED]> wrote: > >>> > >> no i am really against that falls <V> IModel<V> getModel() method > >>> > >> that really abuses everything that generics stands for. For such a > >>> basic > >>> > >> thing. > >>> > >> this is really bad programming > >>> > >> If we drop it we also pretty much drop it from IModel or have > warnings > >>> in > >>> > >> the user code. > >>> > >> > >>> > >> But then drop it completely is better because then we have to do a > >>> cast and > >>> > >> you really think about that > >>> > >> Not having that fake assurance.. > >>> > >> > >>> > >> johan > >>> > >> > >>> > >> > >>> > >> On Wed, May 21, 2008 at 9:53 PM, Martijn Dashorst < > >>> > >> [EMAIL PROTECTED]> wrote: > >>> > >> > >>> > >>> Before we do a vote I want to make sure what our alternatives > are. > >>> > >>> > >>> > >>> I still like Joni's alternative. I don't think they are an > >>> > >>> abomination, because the /potential/ class cast exception you get > is > >>> > >>> the same as with current 1.3. But the benefit of documenting the > >>> model > >>> > >>> parameters in DDC, LV, etc. is HUGE. > >>> > >>> > >>> > >>> I really appreciate the time and effort that went into > implementing > >>> > >>> the generification. But I also see what kind of mess this brought > and > >>> > >>> I really don't like the Component generification part. > >>> > >>> > >>> > >>> Martijn > >>> > >>> > >>> > >>> On Wed, May 21, 2008 at 9:24 PM, Igor Vaynberg < > >>> [EMAIL PROTECTED]> > >>> > >>> wrote: > >>> > >>> > ok so we pretty much have some core people wanting to back out > the > >>> > >>> > generics support. > >>> > >>> > > >>> > >>> > shall we start a vote? johan, gerolf and i have spent a > ridiculous > >>> > >>> > amount of time trying to generify the codebase and remove all > the > >>> > >>> > shitty warnings. if there is even a slight chance of this > getting > >>> > >>> > backed out i do not want to spend any more time on this until > the > >>> > >>> > issue is resolved. > >>> > >>> > > >>> > >>> > also we should halt m2 until this is resolved. > >>> > >>> > > >>> > >>> > personally i do not mind backing out generics, they turned out > to > >>> be > >>> > >>> > quiet a disappointment for me as well, but my feelings about > this > >>> are > >>> > >>> > not strong. > >>> > >>> > > >>> > >>> > we can still use generics such as setresponsepage(class<? > extends > >>> > >>> > page>) to gain bits of typesafety here and there, but if we > remove > >>> > >>> > them from component we obviously have to remove them from > imodel. > >>> > >>> > > >>> > >>> > so lets start a vote with a parallel discussion thread just for > >>> this. > >>> > >>> > > >>> > >>> > -igor > >>> > >>> > > >>> > >>> > On Wed, May 21, 2008 at 8:19 AM, Martijn Dashorst > >>> > >>> > <[EMAIL PROTECTED]> wrote: > >>> > >>> >> On Wed, May 21, 2008 at 5:05 PM, Johan Compagner < > >>> [EMAIL PROTECTED]> > >>> > >>> wrote: > >>> > >>> >>> Generics is type safety > >>> > >>> >> > >>> > >>> >> I didn't say generics isn't type safety. But APPLYING generics > for > >>> the > >>> > >>> >> Wicket framework API *ISN'T* its primary goal. API clarity > *IS*. > >>> Less > >>> > >>> >> questions on the mailing list regarding DDC, ListView, etc. is > the > >>> > >>> >> main goal for applying generics in Wicket. > >>> > >>> >> > >>> > >>> >>> I am against this abuse big time -1000 from me > >>> > >>> >> > >>> > >>> >> I'm -1000000000000000^1000000000000 for abusing my eyes and > brain > >>> in > >>> > >>> >> the way it currently is implemented in Wicket. It is > completely > >>> and > >>> > >>> >> utterly unusable for beginners. There is no way this is going > to > >>> make > >>> > >>> >> the number of questions on the mailinglist less (other than by > >>> scaring > >>> > >>> >> away anyone that wants to actually use the framework) > >>> > >>> >> > >>> > >>> >> Martijn > >>> > >>> >> > >>> > >>> >> > >>> --------------------------------------------------------------------- > >>> > >>> >> 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] > >>> > >>> > > >>> > >>> > > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> -- > >>> > >>> Buy Wicket in Action: http://manning.com/dashorst > >>> > >>> Apache Wicket 1.3.3 is released > >>> > >>> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.3 > >>> > >>> > >>> > >>> > --------------------------------------------------------------------- > >>> > >>> 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] > >>> > > >>> > >>> > >>> --------------------------------------------------------------------- > >>> 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] > >