ADF FACES: af:table and cellpadding

How do I control the basic table attributes of cellspacing and cellpadding when using an af:table with sortable headers?
I have searched through the documentation, and it's not clear at all. The attributes you'd expect (ala h:table) are not legal on af:table.
Thanks.

Andy, thanks for picking up this thread - I know the demands of a development schedule :-)
The problem with no padding on the table is that the data becomes very difficult to read when the cell contents are fairly uniform in size. You need padding around the contents in order to make it easy to read. Also, you should have some control over the border size (cell spacing) in order to create specific visual effects. I need control over the alignment of the cell contents. Not just left, right, and center, but also control over the vertical alignment as well. Finally, some control over things like background color and border color would be very helpful.
Although abstracting away from the underlying HTML has merits from a device independence perspective, there are capabilities in the HTML model that should not be lost in the process. Since HTML is the underlying view model in almost all cases, we should have proper control over that view. I don't really care how the functionality is realized, but tables are one of the most versatile components in HTML and we need solid control of that component from the ADF abstractions. The ability to control the table cell layout is just one example. Also, L&F guidelines should be just that - guidelines. The defaults should provide your goal L&F, but the developer should have the capability to override that guideline to meet specific project needs.
Thanks,
Larry.

Similar Messages

  • ADF FACES: af:table and complex column data

    Using EA15.
    I want to use an af:table to allow the in-place editing of the data. However, I have some fields that are not simple text entry fields. Two of them would ideally use af:selectOneList elements. This doesn't work given the limitations of how af:column elements work.
    Is there anyone out there creating complex, in-place edit tables? If so, how are you doing it?
    Thanks.

    I was mistakenly believing that you couldn't use a selectOneChoice in an af:table given some experimentation where they simply failed to render at all.
    It turns out that I had a hadn'e created the appropriate setter method for the property. However, instead of making the data readOnly (as most of the ADF FACES controls do) it just didn't render anything. Thus making me think it just didn't work inside of a table.
    FYI - in case this happens to anyone else.

  • ADF Faces Core Table, TableSelectOne question

    Greetings
    I am using ADF Faces Core Table to display a list and I have it setup with TableSelectOne, it works great. My question is this, I set required = true on the select button and it works. If I dont select one it no longer submits. My question is how do i get the error message back out I tried adding an af:message tag with from = tableSelectOne1 and I dont get anything back out. Is there a way to get this error message out so I can display it for the end user?
    Thanks
    tro

    Hi,
    Try using af:messages instead, as it displays all messages added to the FacesContext.
    Regards.
    Fábio

  • Problems with combination of ADF Faces, Tomahawk, Facelets and MyFaces

    Hello,
    I am trying to combine all things named in the Subject and run into several problems:
    1. ADF Render Kit forces the Tomahawk Components to be rendered in a wrong way or stop there functionality.
    Example 1: The clickable parts of the t:dataScroller Tag can not be accessed because an empty a Tag will be rendered after the outputText.
    Example 2: The t:commandSortHeader Tag can be clicked but the table content will not be sorted anymore.
    The given examples works if i remove the default-render-kit-id element from the faces-config.xml
    2. The ad:table Tag runs into an ClassCastException, only when I put a simple example code snipped into my xhtml file.
    Code snipped:
    <af:table>
    <af:column>
    <f:facet name="header">
    <af:outputText value="Firstname"/>
    </f:facet>
    </af:column>
    <af:column>
    <f:facet name="header">
    <h:outputText value="Lastname"/>
    </f:facet>
    </af:column>
    </af:table>
    The stack trace look like this:
    java.lang.ClassCastException at oracle.adfinternal.view.faces.renderkit.core.xhtml.DesktopTableRenderer._renderRegularColumns(DesktopTableRenderer.java:1029)
         at oracle.adfinternal.view.faces.renderkit.core.xhtml.DesktopTableRenderer.renderSingleRow(DesktopTableRenderer.java:109)
         at oracle.adfinternal.view.faces.renderkit.core.xhtml.TableRenderer.encodeAll(TableRenderer.java:229)
         at oracle.adfinternal.view.faces.renderkit.core.xhtml.DesktopTableRenderer.encodeAll(DesktopTableRenderer.java:79)
         at oracle.adfinternal.view.faces.renderkit.core.CoreRenderer.encodeEnd(CoreRenderer.java:159)
         at oracle.adf.view.faces.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:624)
         at oracle.adf.view.faces.component.UIXCollection.encodeEnd(UIXCollection.java:438)
         at oracle.adfinternal.view.faces.renderkit.RenderUtils.encodeRecursive(RenderUtils.java:54)
         at oracle.adfinternal.view.faces.renderkit.core.CoreRenderer.encodeChild(CoreRenderer.java:232)
         at oracle.adfinternal.view.faces.renderkit.core.CoreRenderer.encodeAllChildren(CoreRenderer.java:255)
         at oracle.adfinternal.view.faces.renderkit.core.xhtml.PanelPartialRootRenderer.renderContent(PanelPartialRootRenderer.java:65)
         at oracle.adfinternal.view.faces.renderkit.core.xhtml.BodyRenderer.renderContent(BodyRenderer.java:117)
         at oracle.adfinternal.view.faces.renderkit.core.xhtml.PanelPartialRootRenderer.encodeAll(PanelPartialRootRenderer.java:147)
         at oracle.adfinternal.view.faces.renderkit.core.xhtml.BodyRenderer.encodeAll(BodyRenderer.java:60)
         at oracle.adfinternal.view.faces.renderkit.core.CoreRenderer.encodeEnd(CoreRenderer.java:159)
         at oracle.adf.view.faces.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:624)
         at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:242)
         at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:239)
         at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:239)
         at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:521)
         at oracle.adfinternal.view.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:157)
         at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:352)
         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:107)
         at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
         at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:367)
         at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:336)
         at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:196)
         at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:87)
         at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:16)
         at org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
         at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:659)
         at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:330)
         at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:830)
         at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:285)
         at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:126)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:186)
         at java.lang.Thread.run(Thread.java:534)
    I followed all steps for the ADF installation and the suggested steps for using ADF with Facelets.
    Used versions:
    - Oracle ADF Faces 10.1.3 Early Access
    - myFaces 1.1.1
    - Facelets 1.1.1
    - oc4j 10.1.2.0.2
    Has somebody try to use these things together, too?
    Thanks,
    Carsten

    Hi,
    Inside our fusion applications(ADF/Webcenter) using combination of JSTL and ADF Faces is good practice or pitfal?
    To suggest a a rule of thumb: Try ADF Faces on-board functionality first before reaching out to JSTL. The difference between JSF in general and JSTL is that the JSTL expressions are evaluated at page compile time wheras JSF expressions are evaluated deferred. This difference may have an impact to PPR refreshes and the data rendering (which in many cases I assume you can fix by setting the ADF Faces component content delivery to immediate instead of deferred). On a training slight I flagged JSTL with a "heads up" alert because of this
    Frank

  • ADF FACES, AF:TABLE

    Hello all
    I am just trying to put two tables in a JSP in a different section each one.
    I can't display the two at the same time..., each one works when i delete the other one. I mean...i can see in the desing window the two tables...but when i run it i just see in the explorer one table.
    The rows to be displayed are taken from a LIST of values, as I said before, the results are correct but there is just one table in execution run time.
    I will put the jsp code...I hope somebody could help me
    Thanks
    &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "[http://www.w3.org/TR/html4/loose.dtd]"&gt;
    &lt;%@ page contentType="text/html;charset=windows-1252"%&gt;
    &lt;%@ taglib uri="[http://java.sun.com/jsf/html]" prefix="h"%&gt;
    &lt;%@ taglib uri="[http://java.sun.com/jsf/core]" prefix="f"%&gt;
    &lt;%@ taglib uri="[http://xmlns.oracle.com/adf/faces]" prefix="af"%&gt;
    &lt;%@ taglib uri="[http://xmlns.oracle.com/adf/faces/html]" prefix="afh"%&gt;
    &lt;f:view&gt;
    &lt;f:loadBundle basename="mx.com.uaem.htb.sspoc.portal.resources" var="bundle"/&gt;
    &lt;afh:html&gt;
    &lt;afh:head title="Consulta Referencia"&gt;
    &lt;meta http-equiv="Content-Type"
    content="text/html; charset=windows-1252"/&gt;
    &lt;/afh:head&gt;
    &lt;afh:body&gt;
    &lt;h:form&gt;
    &lt;af:page title="Expediente Electr&oacute;nico"&gt;
    &lt;f:facet name="branding"&gt;
    &lt;af:objectImage source="/images/logo.jpg"/&gt;
    &lt;/f:facet&gt;
    &lt;f:facet name="brandingApp"&gt;
    &lt;af:outputLabel value="#{bundle[\'header.title\']}"
    inlineStyle="font-weight:bold; margin-left:8.0px;"/&gt;
    &lt;/f:facet&gt;
    &lt;f:facet name="appCopyright"&gt;
    &lt;af:outputFormatted value="#{bundle[\'footer.copyright\']}"/&gt;
    &lt;/f:facet&gt;
    &lt;f:facet name="appPrivacy"&gt;
    &lt;af:panelGroup layout="horizontal"
    inlineStyle="margin-bottom:16.0px;margin-top:8.0px;"&gt;
    &lt;af:outputFormatted value="#{bundle[\'login.loginText\']} #{sessionScope.connectionInfos.username}"/&gt;
    &lt;af:objectSpacer width="10" height="10"/&gt;
    &lt;af:commandLink text="#{bundle[\'page.logout\']}"
    action="#{LoginBean.logout}" immediate="true"/&gt;
    &lt;/af:panelGroup&gt;
    &lt;/f:facet&gt;
    &lt;f:facet name="appAbout"/&gt;
    &lt;af:messages inlineStyle="layout=\'table\'"/&gt;
    &lt;afh:rowLayout width="80%"&gt;
    &lt;afh:cellFormat width="20%" valign="top" halign="left"
    inlineStyle="padding:3.0px;"&gt;
    &lt;af:panelBox text="Paciente" width="100%"
    background="transparent"&gt;
    &lt;af:outputLabel value="#{bundle[\'showResults.patientName\']}"
    inlineStyle="font-weight:bold;"/&gt;
    &lt;af:objectSeparator/&gt;
    &lt;af:outputText value="Nombre: #{mostrarResultado1.patient.firstName}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="Apellido: #{mostrarResultado1.patient.lastName}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="G&eacute;nero: #{mostrarResultado1.patient.genderValue}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="fecha: #{mostrarResultado1.patient.birthdayValue}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="Educaci&oacute;n: #{mostrarResultado1.patient.nivelEdu}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="Religi&oacute;n: #{mostrarResultado1.patient.religion}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="CURP: #{mostrarResultado1.patient.curp}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:objectSpacer width="10" height="10"/&gt;
    &lt;af:outputLabel value="#{bundle[\'showResults.patientAddress\']}"
    inlineStyle="font-weight:bold;"/&gt;
    &lt;af:objectSeparator/&gt;
    &lt;af:outputText value="Calle: #{mostrarResultado1.patient.streetAddressValue}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="Ciudad: #{mostrarResultado1.patient.cityValue}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="Estado: #{mostrarResultado1.patient.stateValue}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="Pa&iacute;s: #{mostrarResultado1.patient.countryValue}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;af:outputText value="CP. #{mostrarResultado1.patient.zipCodeValue}"
    inlineStyle="font-size:10.0pt;"/&gt;
    &lt;/af:panelBox&gt;
    &lt;/afh:cellFormat&gt;
    &lt;afh:cellFormat width="30%" valign="top" halign="left"
    inlineStyle="padding:3.0px;"&gt;
    &lt;af:panelBox text="Referencia M&eacute;dica" width="100%"
    background="light"&gt;
    &lt;af:panelGroup/&gt;
    &lt;af:panelHorizontal&gt;
    &lt;af:panelForm&gt;
    &lt;f:facet name="footer"/&gt;
    &lt;h:graphicImage url="/images/p2.jpg" height="88"
    width="119"/&gt;
    &lt;/af:panelForm&gt;
    &lt;af:panelForm&gt;
    &lt;f:facet name="footer"&gt;
    &lt;h:panelGroup&gt;
    &lt;af:commandButton text="#{bundle[\'mostrarResultados1.nuevo\']}"
    action="nuevaReferencia"/&gt;
    &lt;/h:panelGroup&gt;
    &lt;/f:facet&gt;
    &lt;af:table emptyText="No hay registros de Referencia Medica"
    banding="row" bandingInterval="1" width="40%"
    binding="#{ExpedienteListBean.dataTable}"
    value="#{ExpedienteListBean.resultListRefe}"
    var="referencia"&gt;
    &lt;af:column sortable="false"
    headerText="#{referencia.refFecha}"&gt;
    &lt;af:commandLink text="#{referencia.refFecha}"
    action="showReferencia"&gt;
    &lt;f:param name="hola" value="#{referencia.id}"/&gt;
    &lt;/af:commandLink&gt;
    &lt;/af:column&gt;
    &lt;/af:table&gt;
    &lt;af:commandLink text="REF 1, 01-Nov-2007"
    action="#{mostrarResultado1.mostrarReferencia}"/&gt;
    &lt;/af:panelForm&gt;
    &lt;/af:panelHorizontal&gt;
    &lt;/af:panelBox&gt;
    &lt;af:objectSpacer width="10" height="10"/&gt;
    &lt;af:panelBox text="Diagn&oacute;stico M&eacute;dico" width="100%"
    background="light"&gt;
    &lt;af:panelGroup/&gt;
    &lt;af:panelHorizontal&gt;
    &lt;af:panelForm&gt;
    &lt;f:facet name="footer"/&gt;
    &lt;h:graphicImage url="/images/op3.jpg" height="88"
    width="119"/&gt;
    &lt;/af:panelForm&gt;
    &lt;af:panelForm&gt;
    &lt;f:facet name="footer"&gt;
    &lt;h:panelGroup&gt;
    &lt;af:commandButton text="#{bundle[\'mostrarResultados1.nuevo\']}"
    action="nuevo"/&gt;
    &lt;/h:panelGroup&gt;
    &lt;/f:facet&gt;
    &lt;af:table emptyText="No hay registros de Referencia Medica"
    banding="row" bandingInterval="1" width="40%"
    binding="#{ExpedienteListBean.dataTable}"
    value="#{DiagListBean.resultListDiag}"
    var="diagnostico"&gt;
    &lt;af:column sortable="false"
    headerText="#{diagnostico.refFecha}"&gt;
    &lt;af:commandLink text="#{diagnostico.refFecha}"
    action="mostrarDiag"&gt;
    &lt;f:param name="hola" value="#{diagnostico.id}"/&gt;
    &lt;/af:commandLink&gt;
    &lt;/af:column&gt;
    &lt;/af:table&gt;
    &lt;af:commandLink text="REF 1, 01-Nov-2007"
    action="mostrarDiag"/&gt;
    &lt;/af:panelForm&gt;
    &lt;/af:panelHorizontal&gt;
    &lt;/af:panelBox&gt;
    &lt;/afh:cellFormat&gt;
    &lt;/afh:rowLayout&gt;
    &lt;af:commandButton text="Cancelar" action="regresar" immediate="true"/&gt;
    &lt;/af:page&gt;
    &lt;/h:form&gt;
    &lt;/afh:body&gt;
    &lt;/afh:html&gt;
    &lt;/f:view&gt;Thanks again
    Edited by: user743004 on Nov 21, 2008 7:43 AM
    Edited by: user743004 on Nov 21, 2008 7:47 AM

    Hello all
    The problem is fixed now
    What I did is the following...
    I used a afh:cellFormat (inside I put two af:PanelHorizontal at the same level each one)
    ------------->af:PanelHorizontal (containing one Table)
    ------------->af:PanelHorizontal (containing one Table)
    At the beginning I had one bean with two methods returning a List each one (one method for the first table and the second method for the second table), but the problem here is tha de BINDING element of the two table was the same (binding="#{DiagListBean.dataTable}") even when te value element was different for both tables...it didin't work
    So I cread two different beans, one for each table...and then i selected a different binding element for each table (because having two beans i can have two binding elements)
    I will put the code here, but i don't know how to put it with xml format (including spaces). I hope this can help some ppl
    TABLE 1
    <af:table emptyText="No hay registros de Referencia Medica"
    banding="row" bandingInterval="1" width="40%"
    binding="#{ExpedienteListBean.dataTable}"
    value="#{ExpedienteListBean.resultListRefe}"
    var="referencia">
    <af:column sortable="false"
    headerText="#{referencia.refFecha}">
    <af:commandLink text="#{referencia.refFecha}"
    action="showReferencia">
    <f:param name="hola" value="#{referencia.id}"/>
    </af:commandLink>
    </af:column>
    </af:table>
    TABLE 2
    <af:table emptyText="No hay registros de Referencia Medica"
    banding="row" bandingInterval="1" width="40%"
    binding="#{DiagListBean.dataTable}"
    value="#{DiagListBean.resultListDiag}"
    var="diagnostico">
    <af:column sortable="false"
    headerText="#{diagnostico.refFecha}">
    <af:commandLink text="#{diagnostico.refFecha}"
    action="mostrarDiag">
    <f:param name="hola" value="#{diagnostico.id}"/>
    </af:commandLink>
    </af:column>
    </af:table>
    Thanks

  • ADF FACES: af:forEach and panelGrids

    Hi,
    I can't get code resembling the following to work:
    <h:panelGrid columns="4">
      <af:forEach items="#{bindings.WebCategoriesIterator.collectionModel}"
        var="current">
        <af:panelGroup>
          <af:outputText value="#{current.CatName}" />
          <af:outputText value="#{current.CatDesc}" />
        </af:panelGroup>
      </af:forEach>
    </h:panelGrid>Am I misunderstanding how one of these components works? I know <af:forEach> "only works with ADF Faces components", but I'd been assuming that means that all the components inside it have to be ADF Faces components, not that all the components on the page do. (That is, I'd assumed that the panelGrid was fine.)
    I get a couple of Log4J "Error null" messages on the console when I run this, and the panel grid doesn't seem to render at all. A table built on the same data model works fine.
    Assuming I can't use a forEach inside a panel grid, does anyone have any suggestions? Eventually, there will be images and links in these cells--the idea is to have a n x m grid of images, each linked to a "product" page, much as you might see in most web stores.
    I suppose I could use a large tableLayout with cellFormats and manually check each row in the range in the form bean, setting rowLayout and cellFormat properties to "false" once there aren't any more rows, but this seems hideously ugly for what should be a fairly simple widget.

    Hi,
    I can't get code resembling the following to work:
    <h:panelGrid columns="4">
      <af:forEach items="#{bindings.WebCategoriesIterator.collectionModel}"
        var="current">
        <af:panelGroup>
          <af:outputText value="#{current.CatName}" />
          <af:outputText value="#{current.CatDesc}" />
        </af:panelGroup>
      </af:forEach>
    </h:panelGrid>Am I misunderstanding how one of these components works? I know <af:forEach> "only works with ADF Faces components", but I'd been assuming that means that all the components inside it have to be ADF Faces components, not that all the components on the page do. (That is, I'd assumed that the panelGrid was fine.)
    I get a couple of Log4J "Error null" messages on the console when I run this, and the panel grid doesn't seem to render at all. A table built on the same data model works fine.
    Assuming I can't use a forEach inside a panel grid, does anyone have any suggestions? Eventually, there will be images and links in these cells--the idea is to have a n x m grid of images, each linked to a "product" page, much as you might see in most web stores.
    I suppose I could use a large tableLayout with cellFormats and manually check each row in the range in the form bean, setting rowLayout and cellFormat properties to "false" once there aren't any more rows, but this seems hideously ugly for what should be a fairly simple widget.

  • Bug ADF Faces: af:table

    Hello,
    I found a new bug while working with ADF Faces. If you have a form on a page as well as a table and one of the field in the form is flagged required, then the table won't be sortable unless a value is put in the required field. The same holds true for row navigation.
    I already thought about flagging the table as immediate. That fix the row navigation but not the sorting.
    Regards,
    Simon Lessard

    Hello Frank,
    Thank you for the reply. Here's the complete project.
    It's only a little example to show ADF Faces components without any specific model technology. Therefore, the project is a single project with any well defined separation. As you can see, the table is based on a collection completely separated from the form.
    Note: I agree that sorting should fail with a required field if the table is not immediate. However, if it's I see no reason why it wouldn't work since the table and the form are not linked.
    Anyway, here's the case.
    1. A "shop" managed bean:
    import java.util.ArrayList;
    import java.util.List;
    public class ShopBean {
        private Product newProduct;
        private List products;
        public ShopBean() {
            products = new ArrayList();
            newProduct = new Product();
        public String addNewProduct() {
            products.add(newProduct);
            newProduct = new Product();
            return null;
        public Product getNewProduct() {
            return newProduct;
        public void setNewProduct(Product newProduct) {
            this.newProduct = newProduct;
        public List getProducts() {
            // I also tried to return a CollectionModel here, but it didn't change anything
            return products;
        public void setProducts(List products) {
            this.products = products;
    }2. A product class:
    public class Product {
        private String name;
        private String description;
        private Double price;
        public Product() {
        public String getName() {
            return name;
        public void setName(String name) {
            this.name = name;
        public String getDescription() {
            return description;
        public void setDescription(String description) {
            this.description = description;
        public Double getPrice() {
            return price;
        public void setPrice(Double price) {
            this.price = price;
    }3. A single page:
    <?xml version='1.0' encoding='windows-1252'?>
    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
              xmlns:h="http://java.sun.com/jsf/html"
              xmlns:f="http://java.sun.com/jsf/core"
              xmlns:af="http://xmlns.oracle.com/adf/faces"
              xmlns:afh="http://xmlns.oracle.com/adf/faces/html">
      <jsp:output omit-xml-declaration="true" doctype-root-element="HTML"
                  doctype-system="http://www.w3.org/TR/html4/loose.dtd"
                  doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>
      <jsp:directive.page contentType="text/html;charset=windows-1252"/>
      <f:view>
        <f:loadBundle basename="com.dmr.cours.jsf.resources.messages" var="msg"/>
        <afh:html>
          <afh:head title="#{msg['page.title']}">
            <meta http-equiv="Content-Type"
                  content="text/html; charset=windows-1252"/>
          </afh:head>
          <afh:body>
            <h:form>
              <af:panelPage title="#{msg['title.page']}">
                <f:facet name="menu1">
                  <af:menuTabs>
                    <af:commandMenuItem text="#{msg['menu1.application.label']}"
                                        selected="true"/>
                  </af:menuTabs>
                </f:facet>
                <f:facet name="menu2">
                  <af:menuBar>
                    <af:commandMenuItem text="#{msg['menu2.welcome.label']}"/>
                    <af:commandMenuItem text="#{msg['menu2.products.label']}"
                                        selected="true"/>
                  </af:menuBar>
                </f:facet>
                <f:facet name="branding">
    <- Using SRDemo branding because no one sane want to
    see a branding made by me, using no branding works as well ->
                  <af:objectImage source="/images/SRBranding.gif"/>
                </f:facet>
                <af:panelHeader text="#{msg['title.new']}">
                  <af:panelForm>
                    <f:facet name="footer">
                      <af:panelButtonBar>
                        <af:commandButton text="#{msg['action.add']}"
                                          action="#{shop.addNewProduct}"/>
                      </af:panelButtonBar>
                    </f:facet>
    <- Removing the required attribute here makes sorting
    and row navigation functional again. ->
                    <af:inputText label="#{msg['product.name']}"
                                  value="#{shop.newProduct.name}" required="true"/>
                    <af:inputText label="#{msg['product.price']}"
                                  value="#{shop.newProduct.price}">
                      <f:convertNumber minFractionDigits="2"
                                       maxFractionDigits="2"/>
                      <f:validateDoubleRange minimum="0"/>
                    </af:inputText>
                    <af:inputText label="#{msg['product.description']}"
                                  value="#{shop.newProduct.description}" rows="5"/>
                  </af:panelForm>
                </af:panelHeader>
                <af:panelHeader text="#{msg['title.list']}">
                  <af:table value="#{shop.products}"
                            var="product" rows="5" banding="row"
                            bandingInterval="1" emptyText="#{msg['list.empty']}"
                            immediate="true">
                    <af:column sortProperty="name" sortable="true"
                               headerText="#{msg['product.name']}">
                      <af:outputText value="#{product.name}"/>
                    </af:column>
                    <af:column sortable="false"
                               headerText="#{msg['product.description']}">
                      <af:outputText value="#{product.description}"/>
                    </af:column>
                    <af:column sortProperty="price" sortable="true"
                               headerText="#{msg['product.price']}">
                      <af:outputText value="#{product.price}">
                        <af:convertNumber type="currency"/>
                      </af:outputText>
                    </af:column>
                  </af:table>
                </af:panelHeader>
              </af:panelPage>
            </h:form>
          </afh:body>
        </afh:html>
      </f:view>
    </jsp:root>4. A property files
    page.title = Test shop page
    menu1.application.label = MyShop.com
    menu2.products.label = Product management
    menu2.welcome.label = Home
    title.page = Product management
    title.new = New product's data
    title.list = Existing product list
    action.add = Add to product list
    product.name = Product's name
    product.price = Price
    product.description = Description
    list.empty = No product yet.5. The /images/SRBranding.gif file.
    EDIT: Forgot to add the required field and "fixed" the comment that the forum was erasing. =P
    EDIT: Added a note.
    Message was edited by:
    Simon Lessard

  • ADF Faces af:table support java.util.Set

    I was using a java.util.Set in my model classes, as implementation of the Collection interface. And wanted to show the Set using a <af:table> after a while I discoverded that the documentation did not mention support of java.util.Set, only List.
    Now I have to convert my collection to List in the backing beans of my view.
    Is there a better approch than converting every Set in the view using
    new Arraylist(set)?
    And what is the reason of the missing Set support (or General Colelction support)?
    Thank you

    Deepak, I don't think you know what you're writing about.
    No, we do not support java.util.Set in <af:table>. For that matter, neither does <h:dataTable>.
    The "why" of it is that we require indexed access into the table for operations like "Display rows 526-550". java.util.Set does not offer indexed access.
    By the way, one corollary - do not use java.util.LinkedList with tables (ADF Faces or the JSF data table). If the list is small, then it won't be a problem, but with a large list, you'll get brutal performance.

  • ADF FACES: af:table not rendering all columns

    I'm using ADF EA 17 with myFaces 1.0.9 on JBoss 4.0.1/JVM 1.4.2_07-b05. The af:table is embedded within an af:panelgroup (being body of af:panelbox).
    The af:table is not rendering all columns (only last 2 out of 8 cols total). The model behind the af:table is a java.util.List. Debugging shows that the list is filled up with beans correctly and that each of the properties of such a bean corresponding to a table column are also set correctly.
    Strange thing is that sometimes all columns are rendered ok. Especially if i make heavy changes on the jsp (e.g. removing all but 2 cols from the af:table) and dropping it into the .../jboss/server/../tmp/deploy/tmpXYZ-exp.war directory. Restarting JBoss results in the old behaviour. Also closing browser and re-opening it yields to the missing columns again.
    I've set breakpoints on the bean properties representing on table column and i can see, that the getter methods aren't called (all but those 2 that get rendered finally)
    Table has multiselection enabled with 1 command button.
    This happens with both IE 6 and Firefox 1.0.4; no oracle, myFaces exceptions visible on console or any log file.
    Has anybody made same experiences so far or an idea what the problem really is ?
    best regards,
    Christoph.

    I've tried it also with a plain af:table without any surrounding af:panelgroup or/and af:panelbox. Same result.
    The bean holding the table-model (the java.util.List) is in session-scope. the table-model is update by an actionListener fetching values from an EJB. Could the session-scope be a problem ?
    Potential candidates from my point of view, that might cause trouble here:
    --) Caching (i've seen that sort of "CachedRenderers" are used
    --) partial page rendering
    --) multi-threading issue.
    --) or any silly mistake of mine :-)
    best regards,
    Christoph

  • Adf faces, data control and more than one session context ?

    I already put the question in the forum but nobody answered may be my question may not be so clear so i would put it again with other words.
    Each xml page definition are instantiated in a binding container for a http session, you are able to get the data with bindings or data that represent the current binding container (bindings) or a given container corresponding to an another page that the current (data).
    It is perfect when you don't allow multiple instances of the same page in the same application session. Browser are now offering tab management that allow user to navigate through multiple applications just by changing the current tab. It's very useful. I imagine that user's will be using it also in my application and will use it to compare or more simply just watch about two different entities of the same type (the same xml page definition, the same object instantiated in the binding container).
    Because the binding container is associated with the http session all tabs will share the same one, isn't ? So i understand the problem and that it is forbidden to have many identical page for a single instance in the binding container because of synchronization issues.
    Is all that i said true ?
    Is it a way to solve this type of problem ?
    Will this problem be addressed by adf faces and data controls ?
    Hope somebody will answer !
    Message was edited by:
    micwic

    I already put the question in the forum but nobody answered may be my question may not be so clear so i would put it again with other words.
    Each xml page definition are instantiated in a binding container for a http session, you are able to get the data with bindings or data that represent the current binding container (bindings) or a given container corresponding to an another page that the current (data).
    It is perfect when you don't allow multiple instances of the same page in the same application session. Browser are now offering tab management that allow user to navigate through multiple applications just by changing the current tab. It's very useful. I imagine that user's will be using it also in my application and will use it to compare or more simply just watch about two different entities of the same type (the same xml page definition, the same object instantiated in the binding container).
    Because the binding container is associated with the http session all tabs will share the same one, isn't ? So i understand the problem and that it is forbidden to have many identical page for a single instance in the binding container because of synchronization issues.
    Is all that i said true ?
    Is it a way to solve this type of problem ?
    Will this problem be addressed by adf faces and data controls ?
    Hope somebody will answer !
    Message was edited by:
    micwic

  • ADF Faces af:table partialTriggers update column footer

    I have table based on SortableModel (stored in session) with one column as input & other column as formula based on input field both as numeric.
    I have ValueChangeEvent on input field,which calculate new value for formula column. It is updated on page immediately. I am also computing summary for both column & store it sessionbean. But ValueChangeEvent does not update these values, I have to refresh page manually to see new totals. I have linked both the outputText field to inputText by partialTriggers property.
    If I move these outputText out of tablefooter they get updated immediately.
    I tried to link af:table & columns to inputText by partialTriggers but do not work.
    How I can update coulmn footer immediately if one of the field in table changed?
    Thanks, Yogesh
    -- Column footer : Does not update immediately
    <f:facet name="footer">
    <af:outputText value="#{PartyTableBean.newTotalBalance}"
    binding="#{backing_FinancialClose.newTotalBalance}"
    id="newTotalBalance" partialTriggers="newInvoiced">
    <af:convertNumber currencySymbol="$" type="currency"/>
    </af:outputText>
    </f:facet>
    -- outputText outside of table : updates immediately
    <af:outputText value="#{PartyTableBean.newTotalBalance}" id="newTotalBalance22"
    partialTriggers="newInvoiced" binding="#{backing_FinancialClose.outputText7}">
    <af:convertNumber currencySymbol="$" type="currency"/>
    </af:outputText>

    I was mistakenly believing that you couldn't use a selectOneChoice in an af:table given some experimentation where they simply failed to render at all.
    It turns out that I had a hadn'e created the appropriate setter method for the property. However, instead of making the data readOnly (as most of the ADF FACES controls do) it just didn't render anything. Thus making me think it just didn't work inside of a table.
    FYI - in case this happens to anyone else.

  • ADF Faces: af:column and styleClass

    The styleClass attribute of the af:column tag does not seem to have any effect. Do styleClass and inlineStyle only work with certain ADF Faces tags?
    For example,
    <af:column styleClass="headerXXSmall">
    <f:facet name="header"><af:outputText value="First Name"/></f:facet>
    <af:commandLink action="#{tabularBB.editLinkAction}">
    <af:outputText value="#{row.firstName}"/>
    </af:commandLink>
    </af:column>
    produces the following html. My "headerXXSmall" style class is ignored in favor of the ADF "xd" style class.
    <td headers="M__Ida" class="x1l x4x">
    <span class="headerXXSmall">
    <a onclick="submitForm('_id3',1,{source:'_id3:_id4:0:_id8'});return false;" href="#" class="xd">Fred
    </a>
    </span>
    </td>

    Hallo,
    Did anyone find ever a solution for that?
    I have tried it with the following:
    <af:column headerText="#{bindings.findAllFonds1.labels.quSt}" sortProperty="quSt" sortable="false" styleClass="myStyle">
    ... looking at the generated HTML, I don't see anything.
    Thx, Willi

  • HOW to add Dynamic Columns in ADF Faces CORE Table

    In ADF im going to display the dynamic column in Coretable,
    Header are displaying very fine. but im unable to display rows sucessfuly,how to resolve.
    Second thing is that JSF page isn't getting the value from dataList, whats wrong in JSF code.
    // JSF PAGE CODE
         <af:table binding="#{backing_test1.table1}" id="table1"
    value="{backing_test1.dataList}" var="myRec"/>
         public void setTable1(CoreTable table1) {
         this.table1 = table1;
         public CoreTable getTable1() {
    //create this table
    table1 = new CoreTable();
    CoreColumn dynamicCol;
    CoreOutputText outText;
    Application app=FacesContext.getCurrentInstance().getApplication();
    DCIteratorBinding iter = (DCIteratorBinding)bindings.get("listAllMonthsIter");
    RowSetIterator rsIter = iter.getRowSetIterator();
    rsIter.reset();
    Row row;
    while (rsIter.hasNext()) {
    row = rsIter.next();
    String header = (String)row.getAttribute("element");
    // element contain the value JAN, FEB...
    dynamicCol = new CoreColumn();
    dynamicCol.setHeaderText(header);
    String currRec = table1.getVar();
    outText = new CoreOutputText();
    ValueBinding vb = app.createValueBinding("#{myRec.value}");
    outText.setValueBinding("value",vb);
    outText.setRendererType("Text");
    dynamicCol.getChildren().add(outText);
    table1.getChildren().add(dynamicCol);
    public void setDataList(List dataList) {
    this.dataList = dataList;
    public List getDataList() {
    BindingContainer bindings = getBindings();
    OperationBinding operationBinding =
    bindings.getOperationBinding("listAllMonths");
    if (operationBinding == null)
    return null;
    List dataList = (Vector)operationBinding.execute();
    return dataList;
    }

    Well issue is that
    I have a list of values that can be chnaged any time during application execution sya its list of Fav Fruits..
    and in an other page i need a data table having these fruits as coulmns and their details as rows...
    how to achieve this..
    we can not guess the number of columns before time.. so can make the estimate and hide them.

  • ADF Faces & BC: PPR and refresh condition on pagedef executables.

    Hi all,
    I'm running into some problems on my page when a command button is pressed. It's partialSubmit attribute is set to true, it seems that iterators/invokeActions within my pageDef are re-executed and thus resetting the index iterator cursor to its original position which leads to the following two messages:
    Jun 2, 2008 5:34:57 PM oracle.adfinternal.view.faces.model.binding.FacesCtrlRangeBinding$FacesModel setRowKey
    WARNING: row is null for rowKey:oracle.jbo.Key[TEST_MN 00123456 2008-05-08 98 98 4 ]
    Jun 2, 2008 5:34:57 PM oracle.adfinternal.view.faces.model.binding.FacesCtrlRangeBinding$FacesModel makeCurrent
    My pageDef code:
    <iterator id="MasterVoIterator" RangeSize="10"
    Binds="MasterVo"
    DataControl="AppModule" />
    <iterator id="DetailVoIterator" RangeSize="10"
    Binds="DetailVo"
    DataControl="AppModule" />
    <invokeAction Binds="invokeInitValues" id="initValues"/>
    I would like to know how to setup the refresh property under the following scinero:
    1. when the page shows up for the first time:
    MasterVoIterator - invoke
    DetailVoIterator - invoke
    invokeInitValues - invoke
    2. When a show/hide button is used to display the detail rows is clicked:
    MasterVoIterator - do nothing
    DetailVoIterator - invoke // to refresh the detail records.
    invokeInitValues - do nothing
    Here is a pic of the component I am working with:
    http://i108.photobucket.com/albums/n23/zeoneozero/mrbhelp.jpg
    Any advice is appreciated
    Thanks,
    Wes

    Hi,
    use
    ${!adfFacesContext.postback}
    as the refresh condition property value to avoid a refresh on postback (when a button is clicked)
    Frank

  • ADF Faces EA15: table update not working properly after dialog return event

    Hi,
    in my application I have a table with read-only records and an edit button for each row.
    The button triggers a dialog where one field of of the record can be edited.
    The record is a bean which is put into processScope.
    After accepting the change in the dialog the bean makes an update in the database changing the order of the records in the table on the launching page.
    The return event triggers a re-rendering of the launching page (which I can see from the output of a phase listener) and the table model gets updated but the table output is not updated visually.
    However, if I call the dialog on another record I don't get the record I see in the table but instead I get the record which I'd expected if the table re-rendered properly.
    Do I have to trigger any kind of event on the table now so that the framework knows that a change has taken place and that the table has to be re-rendered? There is no difference whether I use PPR or not. It used to work in EA14.
    Thanks,
    Achim

    In EA14, the return from the dialog required a full-page refresh (whether the dialog was launched with PPR or not didn't matter). In EA15, it's done with PPR if possible. This avoids the flash (and re-scrolling, etc.), but means you do need to tell us what's going to get changed because of the return. You can use partialTriggers on the table with the "id" of the button to make this happen.

Maybe you are looking for