Re: setRenderBodyOnly with ListView and attributes

2010-08-22 Thread Igor Vaynberg
listviews have nothing to do with tables, they are generic repeaters.
here is the solution

html
body
 div class=products
div wicket:id=products class=product
span wicket:id=product class=product/span
/div
 /div
/body
/html

the only change needed to code is the tweak to this line:
item.add(new Label(product, product).setRenderBodyOnly(true));

-igor


On Sat, Aug 21, 2010 at 10:31 AM, Fatih Mehmet UCAR fmu...@gmail.com wrote:
 I think ListView is designed for html TABLE and each iteration prints the TR
 tag, see the wiki for example.
 You may wanna use DataView instead to avoid that case. Live examples can be
 reference point for that.

 -fmu

 - Original Message - From: J bluecar...@gmx.com
 To: users@wicket.apache.org
 Sent: Saturday, August 21, 2010 4:44 PM
 Subject: Re: setRenderBodyOnly with ListView and attributes


 Here is the complete (test) code


  SOLUTION 1 : wicket:container =

  TestPage.html 
 html
 body
 div class=products
 wicket:container wicket:id=products
 div wicket:id=product class=product/div
 /wicket:container
 /div
 /body
 /html


  TestPage.java 
 import java.util.Arrays;
 import java.util.List;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;

 public class TestPage extends WebPage {

 public TestPage() {

 List products = Arrays.asList(productA, productB, productC);
 ListView productsView = new ListView(products, products) {
 protected void populateItem(ListItem item) {
 String product = (String) item.getModelObject();
 item.add(new Label(product, product));
 }
 };
 add(productsView);

 }
 }

 == SOLUTION 2 : extra div in WicketHTML ==

  TestPage.html 
 html
 body
 div class=products
 div wicket:id=products
 div wicket:id=product class=product/div
 /div
 /div
 /body
 /html


  TestPage.java 
 import java.util.Arrays;
 import java.util.List;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;

 public class TestPage extends WebPage {

 public TestPage() {

 List products = Arrays.asList(productA, productB, productC);
 ListView productsView = new ListView(products, products) {
 protected void populateItem(ListItem item) {
 String product = (String) item.getModelObject();
 item.add(new Label(product, product));
 item.setRenderBodyOnly(true);
 }
 };
 add(productsView);

 }
 }


  Wanted/Required and generated output of solution1  2 ===
 html
 body
 div class=products
 div class=productproductA/div
 div class=productproductB/div
 div class=productproductC/div
 /div
 /body
 /html
 ==

 For this common scenario:
 -solution 1 violates Wickets Just HTML philosophy in that the
 wicket:container tag is used.
 -solution 2 violates Wickets Just HTML philosophy in that an extra
 unwanted div is required in WicketHTML (although not visible in the
 generated HTML).

 No other solutions have been found/discussed yet.


 - Original Message -
 From: Fatih Mehmet UCAR
 Sent: 08/21/10 05:02 PM
 To: users@wicket.apache.org
 Subject: Re: setRenderBodyOnly with ListView and attributes

 send your html and java code, there may be other ways of doing this.


 - Original Message - From: J bluecar...@gmx.com
 To: users@wicket.apache.org
 Sent: Saturday, August 21, 2010 3:29 PM
 Subject: Re: setRenderBodyOnly with ListView and attributes


 I made a mistake in my first post. The output of wasn't:
 
  div
  div class=product./div
  div class=product./div
  div class=product./div
  div class=product./div
  /div
 
  but it was:
  div class=product./div
  div class=product./div
  div class=product./div
  div class=product./div
 
  So the outer div is missing.
  Which is caused by item.setRenderBodyOnly(true). But if I disable (set
   to
  false) this (the default), I get:
 
  div class=productsdiv class=product./div/div
  div class=productsdiv class=product./div/div
  div class=productsdiv class=product./div/div
  div class=productsdiv class=product./div/div
 
  which is even worse.
 
  A solution (the only?) to this double div problem and at the same time
   the
  missing attribute problem, is using wicket:container tags. (see
 
  http://apache-wicket.1842946.n4.nabble.com/Panel-in-List-remove-extra-div-td1877053.html
  )
  This leads to this solution:
 
 
  div class=products
  wicket:container wicket:id=products
  div class=product wicket:id=productPanel./div
  /wicket:container
  /div
 
  Wicket:container tags make it ugly imo, because it violates wickts 
  just
  HTML philosophy, even though my problem is a very common scenario.
 
 
  - Original

Re: setRenderBodyOnly with ListView and attributes

2010-08-22 Thread J
That will work, but I already knew that.

The whole problem is that it violates Wickets just/pure HTML philosphy in 
that an extra unwanted div (or span) is required in WickedHTML just to make 
ListView work, even though it's a common scenario.
If ListView would follow Wickets philosophy, it would support this WicketHTML:
div wicket:id=products class=products
 div wicket:id=product class=productProduct1/div
/div

At the moment, there are two known workarounds in this discussion:
1) Accept the violation of just HTML by using the extra DIV.
2) Accept the violation of just HTML by using wicket:container.



 - Original Message -
 From: Igor Vaynberg
 Sent: 08/22/10 11:22 PM
 To: users@wicket.apache.org
 Subject: Re: setRenderBodyOnly with ListView and attributes
 
 listviews have nothing to do with tables, they are generic repeaters.
 here is the solution
 
 html
 body
 div class=products
 div wicket:id=products class=product
 span wicket:id=product class=product/span
 /div
 /div
 /body
 /html
 
 the only change needed to code is the tweak to this line:
 item.add(new Label(product, product).setRenderBodyOnly(true));
 
 -igor
 
 
 On Sat, Aug 21, 2010 at 10:31 AM, Fatih Mehmet UCAR fmu...@gmail.com wrote:
  I think ListView is designed for html TABLE and each iteration prints the TR
  tag, see the wiki for example.
  You may wanna use DataView instead to avoid that case. Live examples can be
  reference point for that.
 
  -fmu
 
  - Original Message - From: J bluecar...@gmx.com
  To: users@wicket.apache.org
  Sent: Saturday, August 21, 2010 4:44 PM
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
 
  Here is the complete (test) code
 
 
   SOLUTION 1 : wicket:container =
 
   TestPage.html 
  html
  body
  div class=products
  wicket:container wicket:id=products
  div wicket:id=product class=product/div
  /wicket:container
  /div
  /body
  /html
 
 
   TestPage.java 
  import java.util.Arrays;
  import java.util.List;
  import org.apache.wicket.markup.html.WebPage;
  import org.apache.wicket.markup.html.basic.Label;
  import org.apache.wicket.markup.html.list.ListItem;
  import org.apache.wicket.markup.html.list.ListView;
 
  public class TestPage extends WebPage {
 
  public TestPage() {
 
  List products = Arrays.asList(productA, productB, productC);
  ListView productsView = new ListView(products, products) {
  protected void populateItem(ListItem item) {
  String product = (String) item.getModelObject();
  item.add(new Label(product, product));
  }
  };
  add(productsView);
 
  }
  }
 
  == SOLUTION 2 : extra div in WicketHTML ==
 
   TestPage.html 
  html
  body
  div class=products
  div wicket:id=products
  div wicket:id=product class=product/div
  /div
  /div
  /body
  /html
 
 
   TestPage.java 
  import java.util.Arrays;
  import java.util.List;
  import org.apache.wicket.markup.html.WebPage;
  import org.apache.wicket.markup.html.basic.Label;
  import org.apache.wicket.markup.html.list.ListItem;
  import org.apache.wicket.markup.html.list.ListView;
 
  public class TestPage extends WebPage {
 
  public TestPage() {
 
  List products = Arrays.asList(productA, productB, productC);
  ListView productsView = new ListView(products, products) {
  protected void populateItem(ListItem item) {
  String product = (String) item.getModelObject();
  item.add(new Label(product, product));
  item.setRenderBodyOnly(true);
  }
  };
  add(productsView);
 
  }
  }
 
 
   Wanted/Required and generated output of solution1  2 ===
  html
  body
  div class=products
  div class=productproductA/div
  div class=productproductB/div
  div class=productproductC/div
  /div
  /body
  /html
  ==
 
  For this common scenario:
  -solution 1 violates Wickets Just HTML philosophy in that the
  wicket:container tag is used.
  -solution 2 violates Wickets Just HTML philosophy in that an extra
  unwanted div is required in WicketHTML (although not visible in the
  generated HTML).
 
  No other solutions have been found/discussed yet.
 
 
  - Original Message -
  From: Fatih Mehmet UCAR
  Sent: 08/21/10 05:02 PM
  To: users@wicket.apache.org
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
  send your html and java code, there may be other ways of doing this.
 
 
  - Original Message - From: J bluecar...@gmx.com
  To: users@wicket.apache.org
  Sent: Saturday, August 21, 2010 3:29 PM
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
 
  I made a mistake in my first post. The output of wasn't:
  
   div
   div class=product./div
   div class=product./div
   div class=product./div
   div class=product./div
   /div
  
   but it was:
   div class=product./div
   div class=product./div
   div class=product./div
   div class=product./div
  
   So the outer div is missing.
   Which is caused

Re: setRenderBodyOnly with ListView and attributes

2010-08-22 Thread Igor Vaynberg
first you have to prove that either of those cases is a violation, i
do not see either one of them as being one.

-igor

On Sun, Aug 22, 2010 at 2:40 PM, J bluecar...@gmx.com wrote:
 That will work, but I already knew that.

 The whole problem is that it violates Wickets just/pure HTML philosphy in 
 that an extra unwanted div (or span) is required in WickedHTML just to make 
 ListView work, even though it's a common scenario.
 If ListView would follow Wickets philosophy, it would support this WicketHTML:
 div wicket:id=products class=products
  div wicket:id=product class=productProduct1/div
 /div

 At the moment, there are two known workarounds in this discussion:
 1) Accept the violation of just HTML by using the extra DIV.
 2) Accept the violation of just HTML by using wicket:container.



 - Original Message -
 From: Igor Vaynberg
 Sent: 08/22/10 11:22 PM
 To: users@wicket.apache.org
 Subject: Re: setRenderBodyOnly with ListView and attributes

 listviews have nothing to do with tables, they are generic repeaters.
 here is the solution

 html
 body
 div class=products
 div wicket:id=products class=product
 span wicket:id=product class=product/span
 /div
 /div
 /body
 /html

 the only change needed to code is the tweak to this line:
 item.add(new Label(product, product).setRenderBodyOnly(true));

 -igor


 On Sat, Aug 21, 2010 at 10:31 AM, Fatih Mehmet UCAR fmu...@gmail.com wrote:
  I think ListView is designed for html TABLE and each iteration prints the 
  TR
  tag, see the wiki for example.
  You may wanna use DataView instead to avoid that case. Live examples can be
  reference point for that.
 
  -fmu
 
  - Original Message - From: J bluecar...@gmx.com
  To: users@wicket.apache.org
  Sent: Saturday, August 21, 2010 4:44 PM
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
 
  Here is the complete (test) code
 
 
   SOLUTION 1 : wicket:container =
 
   TestPage.html 
  html
  body
  div class=products
  wicket:container wicket:id=products
  div wicket:id=product class=product/div
  /wicket:container
  /div
  /body
  /html
 
 
   TestPage.java 
  import java.util.Arrays;
  import java.util.List;
  import org.apache.wicket.markup.html.WebPage;
  import org.apache.wicket.markup.html.basic.Label;
  import org.apache.wicket.markup.html.list.ListItem;
  import org.apache.wicket.markup.html.list.ListView;
 
  public class TestPage extends WebPage {
 
  public TestPage() {
 
  List products = Arrays.asList(productA, productB, productC);
  ListView productsView = new ListView(products, products) {
  protected void populateItem(ListItem item) {
  String product = (String) item.getModelObject();
  item.add(new Label(product, product));
  }
  };
  add(productsView);
 
  }
  }
 
  == SOLUTION 2 : extra div in WicketHTML ==
 
   TestPage.html 
  html
  body
  div class=products
  div wicket:id=products
  div wicket:id=product class=product/div
  /div
  /div
  /body
  /html
 
 
   TestPage.java 
  import java.util.Arrays;
  import java.util.List;
  import org.apache.wicket.markup.html.WebPage;
  import org.apache.wicket.markup.html.basic.Label;
  import org.apache.wicket.markup.html.list.ListItem;
  import org.apache.wicket.markup.html.list.ListView;
 
  public class TestPage extends WebPage {
 
  public TestPage() {
 
  List products = Arrays.asList(productA, productB, productC);
  ListView productsView = new ListView(products, products) {
  protected void populateItem(ListItem item) {
  String product = (String) item.getModelObject();
  item.add(new Label(product, product));
  item.setRenderBodyOnly(true);
  }
  };
  add(productsView);
 
  }
  }
 
 
   Wanted/Required and generated output of solution1  2 ===
  html
  body
  div class=products
  div class=productproductA/div
  div class=productproductB/div
  div class=productproductC/div
  /div
  /body
  /html
  ==
 
  For this common scenario:
  -solution 1 violates Wickets Just HTML philosophy in that the
  wicket:container tag is used.
  -solution 2 violates Wickets Just HTML philosophy in that an extra
  unwanted div is required in WicketHTML (although not visible in the
  generated HTML).
 
  No other solutions have been found/discussed yet.
 
 
  - Original Message -
  From: Fatih Mehmet UCAR
  Sent: 08/21/10 05:02 PM
  To: users@wicket.apache.org
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
  send your html and java code, there may be other ways of doing this.
 
 
  - Original Message - From: J bluecar...@gmx.com
  To: users@wicket.apache.org
  Sent: Saturday, August 21, 2010 3:29 PM
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
 
  I made a mistake in my first post. The output of wasn't:
  
   div
   div class=product./div
   div class=product./div
   div class=product./div
   div class=product./div
   /div

Re: setRenderBodyOnly with ListView and attributes

2010-08-22 Thread J
A feature/philosophy is that Wicket HTML is just plain HTML.
This means that a webdesigner can create plain HTML, annotate it with wicket:id 
attributes, and then the Java developer can just write Java code.
Plain HTML can be transformed to WicketHTML just by adding wicket:id attributes.

In the case of my problem, which is a very common scenario, you cannot just add 
wicket:id's, and let it work. It requires the use of extra divs (or 
wicket:container) just to let ListView work. The extra required div causes a 
difference between the plain HTML and WicketHTML, and therefore for WicketHTML 
the HTML rules differ.
The designer now has to know about these details of Wicket, such as: if the 
developer is going to use a ListView, the developer has to wrap extra divs 
around some elements.


 - Original Message -
 From: Igor Vaynberg
 Sent: 08/23/10 01:26 AM
 To: users@wicket.apache.org
 Subject: Re: setRenderBodyOnly with ListView and attributes
 
 first you have to prove that either of those cases is a violation, i
 do not see either one of them as being one.
 
 -igor
 
 On Sun, Aug 22, 2010 at 2:40 PM, J bluecar...@gmx.com wrote:
  That will work, but I already knew that.
 
  The whole problem is that it violates Wickets just/pure HTML philosphy in 
  that an extra unwanted div (or span) is required in WickedHTML just to make 
  ListView work, even though it's a common scenario.
  If ListView would follow Wickets philosophy, it would support this 
  WicketHTML:
  div wicket:id=products class=products
  div wicket:id=product class=productProduct1/div
  /div
 
  At the moment, there are two known workarounds in this discussion:
  1) Accept the violation of just HTML by using the extra DIV.
  2) Accept the violation of just HTML by using wicket:container.
 
 
 
  - Original Message -
  From: Igor Vaynberg
  Sent: 08/22/10 11:22 PM
  To: users@wicket.apache.org
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
  listviews have nothing to do with tables, they are generic repeaters.
  here is the solution
 
  html
  body
  div class=products
  div wicket:id=products class=product
  span wicket:id=product class=product/span
  /div
  /div
  /body
  /html
 
  the only change needed to code is the tweak to this line:
  item.add(new Label(product, product).setRenderBodyOnly(true));
 
  -igor
 
 
  On Sat, Aug 21, 2010 at 10:31 AM, Fatih Mehmet UCAR fmu...@gmail.com 
  wrote:
   I think ListView is designed for html TABLE and each iteration prints 
   the TR
   tag, see the wiki for example.
   You may wanna use DataView instead to avoid that case. Live examples can 
   be
   reference point for that.
  
   -fmu
  
   - Original Message - From: J bluecar...@gmx.com
   To: users@wicket.apache.org
   Sent: Saturday, August 21, 2010 4:44 PM
   Subject: Re: setRenderBodyOnly with ListView and attributes
  
  
   Here is the complete (test) code
  
  
    SOLUTION 1 : wicket:container =
  
    TestPage.html 
   html
   body
   div class=products
   wicket:container wicket:id=products
   div wicket:id=product class=product/div
   /wicket:container
   /div
   /body
   /html
  
  
    TestPage.java 
   import java.util.Arrays;
   import java.util.List;
   import org.apache.wicket.markup.html.WebPage;
   import org.apache.wicket.markup.html.basic.Label;
   import org.apache.wicket.markup.html.list.ListItem;
   import org.apache.wicket.markup.html.list.ListView;
  
   public class TestPage extends WebPage {
  
   public TestPage() {
  
   List products = Arrays.asList(productA, productB, productC);
   ListView productsView = new ListView(products, products) {
   protected void populateItem(ListItem item) {
   String product = (String) item.getModelObject();
   item.add(new Label(product, product));
   }
   };
   add(productsView);
  
   }
   }
  
   == SOLUTION 2 : extra div in WicketHTML ==
  
    TestPage.html 
   html
   body
   div class=products
   div wicket:id=products
   div wicket:id=product class=product/div
   /div
   /div
   /body
   /html
  
  
    TestPage.java 
   import java.util.Arrays;
   import java.util.List;
   import org.apache.wicket.markup.html.WebPage;
   import org.apache.wicket.markup.html.basic.Label;
   import org.apache.wicket.markup.html.list.ListItem;
   import org.apache.wicket.markup.html.list.ListView;
  
   public class TestPage extends WebPage {
  
   public TestPage() {
  
   List products = Arrays.asList(productA, productB, productC);
   ListView productsView = new ListView(products, products) {
   protected void populateItem(ListItem item) {
   String product = (String) item.getModelObject();
   item.add(new Label(product, product));
   item.setRenderBodyOnly(true);
   }
   };
   add(productsView);
  
   }
   }
  
  
    Wanted/Required and generated output of solution1  2 ===
   html
   body
   div class=products
   div class=productproductA/div
   div class

Re: setRenderBodyOnly with ListView and attributes

2010-08-22 Thread Igor Vaynberg
actually that is not the philosophy. the philosophy is to make that as
close to reality as possible, and i think wicket comes very damn
close, at least a lot closer then any other.

of course when you are going to start mapping things to wicket
components that have no equivalent in html, like wicket repeaters, you
will have a bit of a mismatch.

on the other hand

divProduct/div
and divspanProduct/span/div
are virtually identical, so there isnt a huge issue adding an extra
span to represent the label

besides, your usecase is almost designed to demonstrate the flaw,
how would you expect to map something like this:

div id=productProduct Name ($Price)/div ?

-igor

-igor

On Sun, Aug 22, 2010 at 5:12 PM, J bluecar...@gmx.com wrote:
 A feature/philosophy is that Wicket HTML is just plain HTML.
 This means that a webdesigner can create plain HTML, annotate it with 
 wicket:id attributes, and then the Java developer can just write Java code.
 Plain HTML can be transformed to WicketHTML just by adding wicket:id 
 attributes.

 In the case of my problem, which is a very common scenario, you cannot just 
 add wicket:id's, and let it work. It requires the use of extra divs (or 
 wicket:container) just to let ListView work. The extra required div causes a 
 difference between the plain HTML and WicketHTML, and therefore for 
 WicketHTML the HTML rules differ.
 The designer now has to know about these details of Wicket, such as: if the 
 developer is going to use a ListView, the developer has to wrap extra divs 
 around some elements.


 - Original Message -
 From: Igor Vaynberg
 Sent: 08/23/10 01:26 AM
 To: users@wicket.apache.org
 Subject: Re: setRenderBodyOnly with ListView and attributes

 first you have to prove that either of those cases is a violation, i
 do not see either one of them as being one.

 -igor

 On Sun, Aug 22, 2010 at 2:40 PM, J bluecar...@gmx.com wrote:
  That will work, but I already knew that.
 
  The whole problem is that it violates Wickets just/pure HTML philosphy 
  in that an extra unwanted div (or span) is required in WickedHTML just to 
  make ListView work, even though it's a common scenario.
  If ListView would follow Wickets philosophy, it would support this 
  WicketHTML:
  div wicket:id=products class=products
  div wicket:id=product class=productProduct1/div
  /div
 
  At the moment, there are two known workarounds in this discussion:
  1) Accept the violation of just HTML by using the extra DIV.
  2) Accept the violation of just HTML by using wicket:container.
 
 
 
  - Original Message -
  From: Igor Vaynberg
  Sent: 08/22/10 11:22 PM
  To: users@wicket.apache.org
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
  listviews have nothing to do with tables, they are generic repeaters.
  here is the solution
 
  html
  body
  div class=products
  div wicket:id=products class=product
  span wicket:id=product class=product/span
  /div
  /div
  /body
  /html
 
  the only change needed to code is the tweak to this line:
  item.add(new Label(product, product).setRenderBodyOnly(true));
 
  -igor
 
 
  On Sat, Aug 21, 2010 at 10:31 AM, Fatih Mehmet UCAR fmu...@gmail.com 
  wrote:
   I think ListView is designed for html TABLE and each iteration prints 
   the TR
   tag, see the wiki for example.
   You may wanna use DataView instead to avoid that case. Live examples 
   can be
   reference point for that.
  
   -fmu
  
   - Original Message - From: J bluecar...@gmx.com
   To: users@wicket.apache.org
   Sent: Saturday, August 21, 2010 4:44 PM
   Subject: Re: setRenderBodyOnly with ListView and attributes
  
  
   Here is the complete (test) code
  
  
    SOLUTION 1 : wicket:container =
  
    TestPage.html 
   html
   body
   div class=products
   wicket:container wicket:id=products
   div wicket:id=product class=product/div
   /wicket:container
   /div
   /body
   /html
  
  
    TestPage.java 
   import java.util.Arrays;
   import java.util.List;
   import org.apache.wicket.markup.html.WebPage;
   import org.apache.wicket.markup.html.basic.Label;
   import org.apache.wicket.markup.html.list.ListItem;
   import org.apache.wicket.markup.html.list.ListView;
  
   public class TestPage extends WebPage {
  
   public TestPage() {
  
   List products = Arrays.asList(productA, productB, productC);
   ListView productsView = new ListView(products, products) {
   protected void populateItem(ListItem item) {
   String product = (String) item.getModelObject();
   item.add(new Label(product, product));
   }
   };
   add(productsView);
  
   }
   }
  
   == SOLUTION 2 : extra div in WicketHTML ==
  
    TestPage.html 
   html
   body
   div class=products
   div wicket:id=products
   div wicket:id=product class=product/div
   /div
   /div
   /body
   /html
  
  
    TestPage.java 
   import java.util.Arrays;
   import java.util.List;
   import

setRenderBodyOnly with ListView and attributes

2010-08-21 Thread J
hi, I want to have Wicket to generate the following HTML precisely:

div class=products
 div class=product./div
 div class=product./div
 div class=product./div
 div class=product./div
/div

But with my code, I don't get further than:

div
 div class=product./div
 div class=product./div
 div class=product./div
 div class=product./div
/div

so the class attribute is missing in the outer div.

My Wicket HTML is:
div class=products wicket:id=productsView
 div class=product wicket:id=productPanel./div
/div


My code:
ListView productsView = new ListView(productsView, products) {
 protected void populateItem(ListItem item) {
 item.setRenderBodyOnly(true);
 item.add(new ProductPanel(productPanel, item.getModelObject()));
 }
};
add(productsView);


What is the Wicket way of achieving this?
(A solution is to use the wicket:container tag, but that's a bit ugly, right?)

-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: setRenderBodyOnly with ListView and attributes

2010-08-21 Thread Fatih Mehmet UCAR

AttributeAppender class will help you to acheive that.

-fmu

- Original Message - 
From: J bluecar...@gmx.com

To: users@wicket.apache.org
Sent: Saturday, August 21, 2010 2:24 PM
Subject: setRenderBodyOnly with ListView and attributes



hi, I want to have Wicket to generate the following HTML precisely:

div class=products
div class=product./div
div class=product./div
div class=product./div
div class=product./div
/div

But with my code, I don't get further than:

div
div class=product./div
div class=product./div
div class=product./div
div class=product./div
/div

so the class attribute is missing in the outer div.

My Wicket HTML is:
div class=products wicket:id=productsView
div class=product wicket:id=productPanel./div
/div


My code:
ListView productsView = new ListView(productsView, products) {
protected void populateItem(ListItem item) {
item.setRenderBodyOnly(true);
item.add(new ProductPanel(productPanel, item.getModelObject()));
}
};
add(productsView);


What is the Wicket way of achieving this?
(A solution is to use the wicket:container tag, but that's a bit ugly, 
right?)


-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org




-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: setRenderBodyOnly with ListView and attributes

2010-08-21 Thread J
Here is the complete (test) code


 SOLUTION 1 : wicket:container =

 TestPage.html 
html
body
 div class=products
 wicket:container wicket:id=products
 div wicket:id=product class=product/div
 /wicket:container
 /div
/body
/html


 TestPage.java 
import java.util.Arrays;
import java.util.List;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;

public class TestPage extends WebPage {

 public TestPage() {

 List products = Arrays.asList(productA, productB, productC);
 ListView productsView = new ListView(products, products) {
 protected void populateItem(ListItem item) {
 String product = (String) item.getModelObject();
 item.add(new Label(product, product));
 }
 };
 add(productsView);

 }
}

== SOLUTION 2 : extra div in WicketHTML ==

 TestPage.html 
html
body
 div class=products
 div wicket:id=products
 div wicket:id=product class=product/div
 /div
 /div
/body
/html


 TestPage.java 
import java.util.Arrays;
import java.util.List;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;

public class TestPage extends WebPage {

 public TestPage() {

 List products = Arrays.asList(productA, productB, productC);
 ListView productsView = new ListView(products, products) {
 protected void populateItem(ListItem item) {
 String product = (String) item.getModelObject();
 item.add(new Label(product, product));
 item.setRenderBodyOnly(true);
 }
 };
 add(productsView);

 }
}


 Wanted/Required and generated output of solution1  2 ===
html
body
 div class=products
 div class=productproductA/div
 div class=productproductB/div
 div class=productproductC/div
 /div
/body
/html
==

For this common scenario:
-solution 1 violates Wickets Just HTML philosophy in that the 
wicket:container tag is used.
-solution 2 violates Wickets Just HTML philosophy in that an extra unwanted 
div is required in WicketHTML (although not visible in the generated HTML).

No other solutions have been found/discussed yet.


 - Original Message -
 From: Fatih Mehmet UCAR
 Sent: 08/21/10 05:02 PM
 To: users@wicket.apache.org
 Subject: Re: setRenderBodyOnly with ListView and attributes
 
 send your html and java code, there may be other ways of doing this.
 
 
 - Original Message - 
 From: J bluecar...@gmx.com
 To: users@wicket.apache.org
 Sent: Saturday, August 21, 2010 3:29 PM
 Subject: Re: setRenderBodyOnly with ListView and attributes
 
 
 I made a mistake in my first post. The output of wasn't:
 
  div
  div class=product./div
  div class=product./div
  div class=product./div
  div class=product./div
  /div
 
  but it was:
  div class=product./div
  div class=product./div
  div class=product./div
  div class=product./div
 
  So the outer div is missing.
  Which is caused by item.setRenderBodyOnly(true). But if I disable (set to 
  false) this (the default), I get:
 
  div class=productsdiv class=product./div/div
  div class=productsdiv class=product./div/div
  div class=productsdiv class=product./div/div
  div class=productsdiv class=product./div/div
 
  which is even worse.
 
  A solution (the only?) to this double div problem and at the same time the 
  missing attribute problem, is using wicket:container tags. (see 
  http://apache-wicket.1842946.n4.nabble.com/Panel-in-List-remove-extra-div-td1877053.html
   )
  This leads to this solution:
 
 
  div class=products
  wicket:container wicket:id=products
  div class=product wicket:id=productPanel./div
  /wicket:container
  /div
 
  Wicket:container tags make it ugly imo, because it violates wickts just 
  HTML philosophy, even though my problem is a very common scenario.
 
 
  - Original Message -
  From: Fatih Mehmet UCAR
  Sent: 08/21/10 04:05 PM
  To: users@wicket.apache.org
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
  Add another html div with css class you want around the below list div ;
 
  div class=products wicket:id=productsView
 
  and for the productsViev in the java code setRenderBodyOnly to true.
 
  -fmu
 
 
  - Original Message - 
  From: J bluecar...@gmx.com
  To: users@wicket.apache.org
  Sent: Saturday, August 21, 2010 2:49 PM
  Subject: Re: setRenderBodyOnly with ListView and attributes
 
 
   It somehow feels bad/wrong to move CSS from WicketHTML to JavaCode, 
   where
   it shouldn't belong, for such a common scenario.
   It defeats the purpose of having HTML in Wicket. But there probably is 
   no
   other way.
  
   Anyway, thanks for your reply :)
  
  
   - Original Message -
  
   From: Fatih Mehmet UCAR
   Sent: 08/21/10