Writing Custom Component...

Complete newbie to this so hopefully this can be answered quickly.
I am writing a component which consists of a table and some links and in the encode method begins:
writer.startElement("table", this);
writer.startElement("tr", this);
writer.startElement("td", this);
Now I want to add a link, how do I do this?
Do I carried on as I have here with normal html ? OR
Can I write out a HtmlCommandLink object, if so how?
regards.

It's easier to just write the link using writer.startElement("a", this);
However, you probably could write an HtmlCommandLink. I've never tried it myself... But you might be able to do it by creating an HtmlCommandLink object, and calling the encodeBegin, encodeChildren, and encodeEnd methods at the appropriate time.
Notice how you can't just write <h:commandLink blahblah /> out to your page. It doesn't work that way. By the time your custom renderer is running, it means that the page has already been parsed out for special tags. If you add a new special tag at this point, it simply won't get recognized and encoded. You'd probably manage to confuse the browser though.
Hope this helps,
CowKing

Similar Messages

  • Custom component library

    where can i find a tutorial about writing custom component library?

    See the "Writing Your Own Components" section at http://developers.sun.com/prodtech/javatools/jscreator/reference/topics/components.jsp

  • Writing a custom component with multiple fields.

    Does anyone have some pointers on writing a custom component that properly handles multiple input fields?
    An example usage might be as follows:
    Assume the following java classes:
    public interface Address {
        //... getters/setters for Address.
    public class Company{
        Address getAddress(){...};
    }The tag usage might be something like the following:
    <custom:address value="#{myCompanyBean.address}" />
    Extending UIComponentBase I can easily render the output and create all the needed input elements. I'm also able to properly retrieve the submitted values in the decode method. But I'm unsure how to handle the "UpdateModelValues" step. Do I simply over-ride processUpdates, or is there more housekeeping to be done?
    Thanks.

    I'm guessing that doing addChild inside createChildren causes an infinite loop.
    Why aren't you just doing this with MXML?  it would be a lot simpler.

  • Doucmentation/Guide on Writing a custom component (a DSC)

    Hello,
    I'd like to learn more about writing a custom component (a DSC), does any one know if there is documentation/guide/tutorial on how to start on it? Please share your comments.
    Thanks in advance,
    Han Dao

    Hello,
    Thank you for all replies, they are very helpful for starting to learn more about DSC.
    I do have another question, is it possible to re-write an already built-in service to customize it in a different way. e.g. The Service Operation "Read Document" in Foundation > FileUtilsService to accept a different type of its Input?
    Thanks,
    Han Dao

  • How to construct the component tree in my custom component?Help!

    Hi, i am writing a custom component like this:
    public class HtmlCategory extends HtmlPanelGrid
         public void processRestoreState(javax.faces.context.FacesContext context,
                java.lang.Object state)
              setColumns(1);
              HtmlCommandLink link=new HtmlCommandLink();
              link.setValue("Let's Bingo");
              MyUtil.setActionListener(context,link,"#{temp.mytest}");
              UIParameter param=new UIParameter();
              param.setName("name");
              param.setValue("Robin!");
              link.getChildren().add(param);
              param.setParent(link);
              getChildren().add(link);
              link.setParent(this);
              super.processRestoreState(context,state);
    }         you see, i want to construct the compont tree at Restore View phase this way,because the structure of the component tree will always be the same, so i don't the user to write extra code.
    But the children of the component are not rendered,the renderer of the HtmlCategory component just extends the HtmlGridRenderer(myfaces) directly,and always calls the "super" methods in the encode methods of the renderer.
    I got a message from the console:
    Wrong columns attribute for PanelGrid id0:id4: -2147483648
    but i have set the columns attribute in the code above, so what's happening? or please give some advice about how to render the component tree by myself in Restore View with the tree constructing code in the custom component class code,just lke the code above.
    Best Regards:)
    Robin

    Well, i don't know if i have got my question clear.
    usually, according to the tags you use in the jsf page, a component tree will be created at the Restore View phase,for example:
    <f:form>
      <h:panelGrid ...........>                         
              <h:dataTable ................>
              </h:dataTable>
       </h:panelGrid>
    </f:form>but because i am writing a component for my web app, all the child components and their attributes are not likely to change. so i want to reduce the tags into one custom tag, and construct the component tree internally by myself.But it is not the case of backing bean.So i wrote the the code in the method:
    public void processRestoreState(javax.faces.context.FacesContext context,java.lang.Object state)as it is shown in my orginal message.But it seems that it is not right way to construct my component tree.So where should i put the code that construct the component tree?Overriding the method :
    public void processRestoreState(javax.faces.context.FacesContext context,java.lang.Object state)is not the right way?
    Best Regards:)
    Robin

  • What's wrong in my customer component

    Hi all,
    I'm newer to JSF, and I am writing a component which extends UICommand,
    The component is same to commandButton exclude that it preventing from duplicately submit .
    When I complete it, I found that it doesn't fire the action. I found that the when the page is submitted by pressing h:commandButton, In the renderer class's docode method,I can get the button's clientID which is pressed.But when I click
    the customer button, there is no my customer button's clientID in the requestParameterMap. Can any body tell me what's wrong .
    here is my renderer's decode method:
    public void decode(FacesContext context, UIComponent comp) {
            logger.debug("decode begin");
            Map map = context.getExternalContext().getRequestParameterMap();
            for(Iterator ite =map.keySet().iterator();ite.hasNext();){
                logger.debug(ite.next());
            if(map.containsKey(comp.getClientId(context))){
                logger.debug("queue event");
                comp.queueEvent(new ActionEvent(comp));
            } else {
                logger.debug("submitted by other component");
    }

    I got it, thanks . I miss the name property.

  • Best strategy for variable aggregate custom component in dataTable

    Hey group, I've got a question.
    I'd like to write a custom component to display a series of editable Things in a datatable, but the structure of each Thing will vary depending on what type of Thing it is. So, some Things will display radio button groups (with each radio button selecting a small set of additional input elements, so we have a vertical array radio buttons and beside each radio button, a small number of additional input elements), some will display text-entry fields, and so on.
    I'm wondering what the best strategy for tackling this sort of thing is. I'm sort of thinking I'll need to do something like dynamically add to the component tree in my custom component's encodeBegin(), and purge the extra (sub-) components in encodeEnd().
    Decoding will be a bit of a challenge, maybe.
    Or do I simply instantiate (via constructor calls, not createComponent()) the components I want and explicitly call their encode*() and decode() methods, without adding them to the view tree?
    To add to the fun of all this, I'm only just learning Faces (having gone through the Dudney book, Mastering JSF, and writing some simpler custom components) and I don't have experience with anything other than plain vanilla JSP. (No EJB, no Struts, no Tapestry, no spiffy VisualDevStudioWysiwyg++ [bah humbug, I'm an emacs user]). I'm using JSP 2.0, JSF 1.1_01, JBoss 4.0.1 and JDK 1.4.2. No, I won't upgrade to 1.5 (yet).
    Any hints, pointers to good sample code? I've looked at some of the sample code that came with the RI and I've tried to navigate the JSF Blueprints stuff, but I haven't really found anything on aggregating components into a custom component. Did I miss something obvious?
    If this isn't a good question, please let me know how I can sharpen it up a bit.
    Thanks.
    John.

    Hi,
    We're doing something very similar. I had a look at the Tomahawk Date component, and it seems to dynamically created InputText components in the encodeEnd(). However, it doesn't decode this directly (it only expects a single textual value). I expect you may have to check the request yourself in decode().
    Other ideas would be appreciated, though - I'm still new to JSF.

  • A Custom Component and the JSP source that get's generated

    I'm writing a Custom Component library and I'm at a point where I need to understand how the JSP source that gets generate when my component is dragged from the palete is created and how it relates to the properties I define in the Metadata files.
    In particular I have a component that is an extension of the DataTable component and I'd like to control what get's dropped onto the page when the user drags over my component.
    Don

    See the "Building and Customizing JavaServer Faces Technology Components" technology theme page at http://developers.sun.com/prodtech/javatools/jscreator/reference/themes/buildingjsf/index.html. The Hands-On Examples and "Design-Time API User Guide (pdf)" linked from that page should help.

  • Using nullLayout for custom component

    I am writing an AccordianPanel as a custom component that can be dropped into a JPanel and behave as expected. I am using a null layout in the outer container (JPanel) as the accordian dividers need to move as told and not be managed by a layout manager. When I resize a window or another container that the custom component sits in, it doesn't resize anything - I understand this is the behavior I would expect as that is how I coded it.
    Now, I want to have the custom component resize its internal stuff when the container it resides in (i.e. JFrame or most likely another JPanel) gets moved, but I don't know how to do this. The outer most component in my custom components hierarchy is a JPanel whose layout is set to null and I stuff everything else inside there.
    I believe I need to add a componentListener to my JPanel whose layout is set to null, but I am not sure. Could someone send me in the right direction.
    thanks

    the best approach might be to implement your own LayoutManager (which is simple enough) and use it rather than absolute positioning....
    If you read postings in the forum you will find most people recommend using LayoutManagers and not a null layout so you don't have problems like this.Hello sarcommand , camickr, and anyone interested,
    I've tried to bring this discussion up again just a few days ago, and was disappointed I got no feedback - must be a dull read :o(
    Here is the [link to the thread|http://forums.sun.com/thread.jspa?messageID=10723670&#10723670], would you mind having an eye on it?
    I'm sorry to hijack this thread (seems slightly less rude than bumping my own former thread up), but I've read several discussions on this subject too, and still I can't decide whether I should follow the CustomLayoutmanager track.
    Although most of the writing there is specific to my current problem, it highlights 3 points I think are general enough:
    - A custom layout (whatever the way it is implemented, I discuss 4 approaches in the thread) is generally used to display custom components, or at least, components that represent custom application-specific entities or input points. -> Is is worth the trouble to abstract the positioning logic when this "custom layout" has only one, at best two, use cases (a couple of specific screens in your specific app that represents your specific entities)?
    - A custom (app-specific) layout manager is likely to require more knowledge about the things being layed out than the default min/max/pref sizes. In particular it may require to know data of the underlying model objects represented by the children components. How is that best designed? I tentatively think it's by way of custom Constraint classes which have to be abstract enough yet should be easily mapped from the app-specific data.
    - The CustomLayoutManager integrates natively with regular graphical events (hiding, resizing,...), but how to integrate app-specific events (such as, when the underlying data change in such a way that should be reflected by a change in the layout, how/when to force the re-layout)?
    Thank you for your help.

  • Stuck in custom component

    Hello,
    I'm just to stupid, but I can't get my custom component to work.
    I want a special link around wrapped content, something like <i:popupLayer value="#{bundle.hint}" ... > <%-- stuff --%> </i:popupLayer> I also need EL expressions at least for the value. My problem is, there are two ways to render this: I can do HTML with ResponseWriter or I can include JSF components. But when including JSF how to wrap the encodeChildren(), how to add end tags to encodeEnd()? (I also tried to add the tags content as children to the commandLink, but could not get that to work also.)
    When writing HTML instead another problem comes around, I always retrieve EL string, not the evaluated value. I cannot create binding that way it will get evaluated for resulting link (HTML-A).
    I prefer having the EL evaluated because then it's simpler to include this message into my needed JavaScript code.
    Can anyone give me some hints, lead me to a bit more sophisticated tutorials or stuff?
    Regards,
    Thorsten
    null

    Hi,
    tell me please, why can't you create a binding?
    I think i lost your idea...
    IL

  • Building custom Component -- choice of base class...

    Hello,
    I am building a customer component. The component will be a AJAX enable Grid.
    I am not sure what base class would be the best.
    I am planning on using the "UIComponentTag" as the base class of my tag file. Here is the declaration:
    public class EbaAjaxGridTag extends UIComponentTag {
    Let me know how-you all feel about this choice.
    Cheers,
    Godfrey

    Yep, that's the right class. All JSF component tags inherit UIComponentTag (eventually in their hierarchy). I suppose there is UIComponentBodyTag, but you should make a custom renderer instead of writing the tag body from the tag class. In other words, you don't want UIComponentBodyTag.
    It would also be ok if you wanted to extend another component tag (i.e. InputTextTag). This would give you access to the pre-existing attributes of that tag class. HOWEVER, you should be warned that these tag classes can change in future versions of JSF. So make sure you are willing to maintain it in the future before doing that.
    CowKing

  • Custom component composed of other components

    Hello.
    I have a form (long, but simple) that is reused a few times across my applicaition. It would be great if I could package it as a JSF component. But I see no obvious way to create an UIComponent composed of other UIComponents.
    Are UIComponents really meant to be written from scrach, each parsing it's own request parameters and outputting raw html? Am I missing something?
    Thanks.

    Thanks for the quick reply, but I'm still stuck...
    How do I go about writing a composite custom
    component? Instanciating all sub components and
    delegating encoding and decoding to each? That's the road I try to take first.
    - Construct a SMALL test-bed application to develop your component.
    - consider implementing the naming container interface if you add components as children
    - consider acquiring "JSF in Action" from Kito Mann, it's the book with most samples for component building
    - announce "absences" to your family. It takes longer than you think beforehand ;-)
    - If your servlet-container starts up in less than 10 seconds it's better...
    I'm afraid to be asking too much, but does anyone
    know where can I find an example of this? I'm
    currently browsinng the MyFaces code, but so far
    whithout much luck....Well the myfaces code is the second best source after JSF in action and then there are a few tutorials on the net... time to surf to google and http://www.jsftutorials.net/
    hope this helps
    Alexander

  • Painting Custom Component

    I am writing a custom Component inheriting from JComponent class. I am doing custom painting of this component as the component I want has to have a gradient background. I am able to draw the graphics properly. But I am having a problem with the positioning of the control. I read in the tutorial for the custom painting of JComponent that we should paint the component taking the base as 0. If I place my component any where on the panel other than (0,0) the component either gets displayed at 0,0 or is not getting displayed properly.Kindly provide me with a solution.

    Painting of the component and positioning of the component are two different things.
    Yes painting is done relative to the top left of the component which is (0, 0);
    Positioning of the component in a container is done by the Layout Manager. So you need to provide a getPreferredSize(...) implementation so the LayoutManager knows how much space to reserve for the component.
    Maybe the Swing tutorial on [url http://java.sun.com/docs/books/tutorial/uiswing/14painting/index.html]Custom Painting will help you out. There is also a section on "Using Layout Manager".
    If you need further help then you need to create a [url http://homepage1.nifty.com/algafield/sscce.html]Short, Self Contained, Compilable and Executable, Example Program that demonstrates the incorrect behaviour, because I can't guess exactly what you are doing based on the information provided.
    And don't forget to use the [url http://forum.java.sun.com/help.jspa?sec=formatting]Code Formatting Tags so the code retains its original formatting.

  • Problem custom component with children in RestoreView phase

    Hi there!
    I've got a problem with a custom component that I am writing. It consists of several UISelectOne and UIInputText components. Depending on the value selected in the UISelectOne components, the UISelectOne and UIInputText components may change. Therefore I attached a ValueChangeListener to the UISelectOne components. So far, so good.
    The problem is, when the event is triggered, I get an ArrayIndexOutOfBoundsException. It took me a while to track it down. The problem seems to be, that during the Restore View phase, the StateManager's restoreComponentTreeStructure method first creates the component again and later restores its tree structure.
    During creation of the component, its constructor is called in which I add the children to the component. While restoring the tree structure, the StateManager again adds the children to the component. So the list of my component's children contains each child twice.
    The exception is due to the fact that in the saved state array only the original component's states are saved (which is perfectly right). So while restoring state and iterating through the component's children, the exception is thrown for the first child which is twice in the list (which is also perfectly right).
    I hope this description is not too confusing. My question is, if anyone can give me a hint what I am doing wrong here? How can I avoid the component being initialized again? Or where should I add the children to the component?
    Thanks for any advices!

    Hi again,
    I've perpared a minimal example (which in fact is quite big, but considering it's a custom tag it's probably not possible to make it smaller):
    The UITest class (as you can see I add the child component in the constructor):
    package test;
    import java.io.IOException;
    import java.util.*;
    import java.util.ArrayList;
    import java.util.List;
    import javax.faces.application.Application;
    import javax.faces.component.*;
    import javax.faces.context.FacesContext;
    import javax.faces.context.ResponseWriter;
    import javax.faces.event.ValueChangeEvent;
    import javax.faces.model.SelectItem;
    public class UITest extends UIInput {
      public static final String COMPONENT_TYPE = "Test";
      public static final String COMPONENT_FAMILY = "Test";
      private UISelectOne selectOne;
      private UISelectItems selectItems;
      public UITest(){
        Application application = FacesContext.getCurrentInstance().getApplication();
        selectItems = (UISelectItems)application.createComponent(UISelectItems.COMPONENT_TYPE);
        List items = new ArrayList();
        items.add(new SelectItem("One", "one"));
        items.add(new SelectItem("Two", "two"));
        selectItems.setValue(items);
        selectOne = (UISelectOne)application.createComponent(UISelectOne.COMPONENT_TYPE);
        selectOne.getAttributes().put("onchange", "submit()");
        Class[] params = {ValueChangeEvent.class};
        selectOne.setValueChangeListener(application.createMethodBinding("#{TestBean.valueChange}", params));
        selectOne.getChildren().add(selectItems);
        this.getChildren().add(selectOne);
      public void encodeChildren(FacesContext context) throws IOException {
        ResponseWriter writer = context.getResponseWriter();
        Iterator children = getChildren().iterator();
        while(children.hasNext()){
          UIComponent child = (UIComponent)children.next();
          if(child.isRendered()){
            child.encodeBegin(context);
            if(child.getRendersChildren()){
              child.encodeChildren(context);
            child.encodeEnd(context);
      public boolean getRendersChildren(){
        return true;
    }The component tag class:
    package test;
    import javax.faces.webapp.UIComponentTag;
    public class TestTag extends UIComponentTag {
      public String getComponentType() {    return "Test";  }
      public String getRendererType() {    return null;  }
    }Tag registration:
      <tag>
        <name>test</name>
        <tag-class>test.TestTag</tag-class>
      </tag>The backing bean:
    package test;
    import javax.faces.event.ValueChangeEvent;
    public class TestBean {
      private String currentValue;
      public void valueChange(ValueChangeEvent event) {
        System.err.println(event.getNewValue());
      public String getCurrentValue() {
        return currentValue;
      public void setCurrentValue(String currentValue) {
        this.currentValue = currentValue;
    }And finally the definition in the faces-config:
       <component>
          <component-type>Test</component-type>
          <component-class>test.UITest</component-class>
       </component>
       <managed-bean>
        <managed-bean-name>TestBean</managed-bean-name>
        <managed-bean-class>test.TestBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
       </managed-bean>When included in the JSP and then clicked on the combobox, I get an ArrayIndexOutOfBoundsException.
    Can anyone give me a hint what the problem might be?
    Thanks in advance!

  • Problem with inputText in my custom component

    Hi, I have a custom dataTable component that I'm trying to get to work. It has to be a custom component because dataTable doesn't support rowspan, colspan, multi line headers, and a rendered attribute for rows. The problem is, that when I wrap the column tag inside my row tag then the method for the inputText tag never gets called in the UPDATE_MODEL_VALUES phase.
    I'm starting to think that JSF doesn't support 2 levels of tags between the inputText and dataTable. I'm hoping that someone can tell me what I have wrong with my components.
    Here is the JSP snippet.
    <cjsf:rptTable>
         <cjsf:data id="dataTable1" value="#{allAuthUser.tableRows}" var="myTableRow1">
              <cjsf:row>
                   <cjsf:col>
                        <h:inputText id="tableTestFld" value="#{myTableRow1.testFld}" size="5" maxlength="5"/>
                   </cjsf:col>
              </cjsf:row>
         </cjsf:data>
    </cjsf:rptTable>Here is what it renders. It looks to me like everything renders fine. So I'm guessing that there is something in a component that is causing JSF during the life cycle to not be able to process correctly.
    <table>
         <tbody>
              <tr>
                   <td><input id="tblmaintForm:body:dataTable1_0:tableTestFld" name="tblmaintForm:body:dataTable1_0:tableTestFld" type="text" value="" maxlength="5" size="5"/></td>
              </tr>
              <tr>
                   <td><input id="tblmaintForm:body:dataTable1_1:tableTestFld" name="tblmaintForm:body:dataTable1_1:tableTestFld" type="text" value="" maxlength="5" size="5"/></td>
              </tr>
              <tr>
                   <td><input id="tblmaintForm:body:dataTable1_2:tableTestFld" name="tblmaintForm:body:dataTable1_2:tableTestFld" type="text" value="" maxlength="5" size="5"/></td>
              </tr>
         </tbody>
    </table>Note: If I leave off the row tag it renders the same way except of course the <tr> and </tr> tags are missing. If I do this, then the backing method for the inputText tag is called and everything works fine. Why doesn't it work with the row tag in place?
    Here are the components:
    public class UIRptTable extends UIComponentBase {
         public UIRptTable() {
              setRendererType("tblmaint.rptTableRenderer");
         public String getFamily() {
              return "javax.faces.Output";
    public class UIRptTableData extends HtmlDataTable {
         public UIRptTableData() {
              setRendererType("tblmaint.rptTableDataRenderer");
         public String getFamily() {
              return "javax.faces.Data";
    public class UIRptTableRow extends UIOutput {
         public UIRptTableRow() {
              setRendererType("tblmaint.rptTableRowRenderer");
         public String getFamily() {
              return "javax.faces.Output";
    public class UIRptTableCol extends UIColumn {
         public UIRptTableCol() {
              setRendererType("tblmaint.rptTableColRenderer");
         public String getFamily() {
              return "javax.faces.Column";
    }Here is part of the faces-config file in case you need it.
    <!-- Components -->
    <component>
         <component-type>tblmaint.rptTable</component-type>
         <component-class>com.monsanto.ag_it.fieldops.aim.tblmaint.component.UIRptTable</component-class>
    </component>
    <component>
         <component-type>tblmaint.rptTableData</component-type>
         <component-class>com.monsanto.ag_it.fieldops.aim.tblmaint.component.UIRptTableData</component-class>
    </component>
    <component>
         <component-type>tblmaint.rptTableRow</component-type>
         <component-class>com.monsanto.ag_it.fieldops.aim.tblmaint.component.UIRptTableRow</component-class>
    </component>
    <component>
         <component-type>tblmaint.rptTableCol</component-type>
         <component-class>com.monsanto.ag_it.fieldops.aim.tblmaint.component.UIRptTableCol</component-class>
    </component>
    <!-- Render Kits -->
    <render-kit>
         <renderer>
              <component-family>javax.faces.Output</component-family>
              <renderer-type>tblmaint.rptTableRenderer</renderer-type>
              <renderer-class>com.monsanto.ag_it.fieldops.aim.tblmaint.renderer.RptTableRenderer</renderer-class>
         </renderer>
    </render-kit>
    <render-kit>
         <renderer>
              <component-family>javax.faces.Data</component-family>
              <renderer-type>tblmaint.rptTableDataRenderer</renderer-type>
              <renderer-class>com.monsanto.ag_it.fieldops.aim.tblmaint.renderer.RptTableDataRenderer</renderer-class>
         </renderer>
    </render-kit>
    <render-kit>
         <renderer>
              <component-family>javax.faces.Output</component-family>
              <renderer-type>tblmaint.rptTableRowRenderer</renderer-type>
              <renderer-class>com.monsanto.ag_it.fieldops.aim.tblmaint.renderer.RptTableRowRenderer</renderer-class>
         </renderer>
    </render-kit>
    <render-kit>
         <renderer>
              <component-family>javax.faces.Column</component-family>
              <renderer-type>tblmaint.rptTableColRenderer</renderer-type>
              <renderer-class>com.monsanto.ag_it.fieldops.aim.tblmaint.renderer.RptTableColRenderer</renderer-class>
         </renderer>
    </render-kit>I sure hope that someone can help me out. Please let me know if you need any additional information.
    Thanks,
    Ray

    Hi, Ray!
    1) I was trying to put a button in the column header (for sorting) and I couldn't get that to work. That involved the >colhdr tag. I got that to work but I don't remember the fix. I'll look it up and reply back with that when I can.Dealing the first part of your trouble, you need NOT a custom component.
    I have looked through the implementation of RepeaterRenderer, as you advised me, and found that the multi-header possibility is included in the implementation of dataTable control.
    The code below is the part of source of repeater.jsp with only change:
    <d:data_repeater> &#61664; <h:dataTable>
    And it works fine.
    <h:dataTable id="table"
    binding="#{RepeaterBean.data}"
         rows="5"
    value="#{RepeaterBean.customers}"
    var="customer">
    <f:facet name="header">
    <h:outputText value="Customer List"/>               <!� First Header row -- >
    </f:facet>
    <h:column>
    <%-- Visible checkbox for selection --%>
    <h:selectBooleanCheckbox
    id="checked"
    binding="#{RepeaterBean.checked}"/>
    <%-- Invisible checkbox for "created" flag --%>
    <h:selectBooleanCheckbox
    id="created"
    binding="#{RepeaterBean.created}"
    rendered="false"/>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Account Id"/>               <!�Second Header row -- >
    </f:facet>
    <h:inputText id="accountId"
    binding="#{RepeaterBean.accountId}"
    required="true"
    size="6"
    value="#{customer.accountId}">
    </h:inputText>
    <h:message for="accountId"/>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Customer Name"/>               <!�Second Header row -- >
    </f:facet>
    <h:inputText id="name"
    required="true"
    size="50"
    value="#{customer.name}">
    </h:inputText>
    <h:message for="name"/>
    </h:column>
    <h:column>
    <f:facet name="header">                    <!�Second Header row -- >
    <h:outputText value="Symbol"/>
    </f:facet>
    <h:inputText id="symbol"
    required="true"
    size="6"
    value="#{customer.symbol}">
    <f:validateLength
    maximum="6"
    minimum="2"/>
    </h:inputText>
    <h:message for="symbol"/>
    </h:column>
    <h:column>
    <f:facet name="header">                    <!�Second Header row -- >
    <h:outputText value="Total Sales"/>
    </f:facet>
    <h:outputText id="totalSales"
    value="#{customer.totalSales}">
    <f:convertNumber
    type="currency"/>
    </h:outputText>
    </h:column>
    <h:column>
    <f:facet name="header">                    <!�Second Header row -- >
    <h:outputText value="Commands"/>
    </f:facet>
    <h:commandButton id="press"
    action="#{RepeaterBean.press}"
    immediate="true"
    value="#{RepeaterBean.pressLabel}"
    type="SUBMIT"/>
    <h:commandLink id="click"
    action="#{RepeaterBean.click}"
    immediate="true">
    <h:outputText
    value="Click"/>
    </h:commandLink>
    </h:column>
    </h:dataTable>
    You may have a look at HTML source to prove that dataTable is already what you need:
    <table id="myform:table">
    <thead>
    <tr><th colspan="6" scope="colgroup">Customer List</th></tr>
    <tr>
    <th scope="col"></th>
    <th scope="col">Account Id</th>
    <th scope="col">Customer Name</th>
    <th scope="col">Symbol</th>
    <th scope="col">Total Sales</th>
    <th scope="col">Commands</th>
    </tr>
    </thead>
    <tbody>
    2.) The second trouble is still unsettled as previously. Right now I have different task at my job, and I can�t continue investigation of this problem.
    But when you find smth., please let me know. I�ll be very grateful.
    Regards,
    Oleksa Stelmakh

Maybe you are looking for