DYNAMICALLY ADDING A ROW TO A JSF COMPONENT

Hai users
Is it possible to add a new row to a datatable on click of a button.THe previous row&the contents in that table should also be maintained.
Thanks

Not so difficutl.
You should hold the row data in a session scoped managed bean,
bind the value property of h:dataTable to the data,
and simply add a new row to them.

Similar Messages

  • Generating Indiex for dynamically added table rows  in HRFORMS

    Hi ,
    We are developing Payslip  in HRFORMS by copying standard form.
    We have got one business scenario which requires a table rows needs to generated dynamically to populate the retro values in the form.
    We could able to generate the table rows dynamically by below command in HRFORMs scripts.
    Table1.Row.InstanceManager.addInstance(1) but it is not generating with correct index.
    Please help in adding table rows dynamically at specified index.
    Regards,
    akula

    You can do that with 2 differents ways :
    by creating a colomn key which is the concatenation of the key for each lin
    by using field groups
    I think you have to use the second one.
    [sample by help|http://help.sap.com/saphelp_nw70/helpdata/en/ce/b518b6513611d194a50000e8353423/frameset.htm]
    In this case you can put dynamiquely what are you wanted in your keys.
    Regards,
    Christophe.

  • Dynamically adding a row in a table in JSF

    Hi All,
    I am searching for a control in JSF using which I can dynamically add more than one row in a table. Currently I am handling this in javasript where I have to click on the "Add Row" button to add one more row at the bottom of the table. I want to get rid of javascript.
    If anyone knows about such control then please help me.
    Thanks in advance.
    Regards,
    Saket

    hello Saketh,
    here is the code for Create Delete Update code where a row is added for every button click..and the JSF code is at the bottom.. today u r blessed with ocean. :-) have fun!!
    package redrose;
    import net.sf.hibernate.Session;
    import net.sf.hibernate.Transaction;
    import net.sf.hibernate.Query;
    import javax.faces.model.DataModel;
    import javax.faces.model.ListDataModel;
    public class RowEntry {
         private DataModel datamodel = null;
         static Integer sid;
         private Medata mdobject = null;
         private Medata nm=null;
          * @return Returns the newMdobject.
         public Medata getNm() {
              nm = new Medata();
              return nm;
          * @param newMdobject The newMdobject to set.
         public void setNm(Medata newMdobject) {
              this.nm = newMdobject;
          * @return Returns the mdobject.
         public Medata getMdobject() {
              return mdobject;
          * @param mdobject The mdobject to set.
         public void setMdobject(Medata mdobject) {
              this.mdobject = mdobject;
         public DataModel getDatamodel()
              datamodel = new ListDataModel();
              Session hibSession;     
              try{
                   hibSession = HibernateSessionFactory.currentSession();
                   Query q = hibSession.createQuery("FROM Medata");                    
                   q.setMaxResults(9999);
                   datamodel.setWrappedData(q.list());
              catch(Exception ex){
                    System.err.println("%%%% Error GetData %%%%");
                    ex.printStackTrace();
              return datamodel;
          * Inserting a new Record by reading from Client
         public void insertEntry()
                  Transaction tx = null;
                   Session session = null;
                   try{
                        session = HibernateSessionFactory.currentSession();
                        tx = session.beginTransaction();
                        Medata     dbmedata = new Medata();
                             dbmedata.setEmploy(nm.getEmploy());
                             session.save(dbmedata);
                        tx.commit();
                        session.close();
                   catch(Exception ex){
                        System.err.println("%%%% Modify Data %%%%");
                        ex.printStackTrace();
          * Modify data
         public void updateEntry()
              int a =0;
             if (this.datamodel == null) return;
             Medata mdupdate = (Medata) this.datamodel.getRowData();
             if (mdupdate == null ) return;
              Transaction tx = null;
              Session session = null;
              try{
                   session = HibernateSessionFactory.currentSession();
                   tx = session.beginTransaction();
                   Medata dbmedata = (Medata) session.load(Medata.class,mdupdate.getId());
                   if (dbmedata != null){ // we have to update the record
                        dbmedata.setEmploy(mdupdate.getEmploy());
                        session.update(dbmedata);
                   else // we have to insert the record
                        dbmedata = new Medata();
                        dbmedata.setEmploy(mdupdate.getEmploy());
                        session.save(dbmedata);
                   tx.commit();
                   session.close();
              catch(Exception ex){
                   System.err.println("%%%% Modify Data %%%%");
                   ex.printStackTrace();
          * Delete Data
         public void removeEntry()
             if (this.datamodel == null) return;
             Medata mdupdate = (Medata) this.datamodel.getRowData();
              Transaction tx = null;
              Session session = null;
              try{
                   session = HibernateSessionFactory.currentSession();
                   tx = session.beginTransaction();
                   Medata dbmedata = (Medata) session.load(Medata.class,mdupdate.getId());
             if (mdupdate == null ) return;
                   if (dbmedata != null){ // we have to update the record
                        session.delete(dbmedata);
                        tx.commit();
              catch(Exception ex){
                   System.err.println("%%%% Delete Data %%%%");
                   ex.printStackTrace();
    Here starts the JSF code
    <%@ page language="java" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
         <base href="<%=basePath%>">
         <title>My JSF 'trial.jsp' starting page</title>
         <meta http-equiv="pragma" content="no-cache">
         <meta http-equiv="cache-control" content="no-cache">
         <meta http-equiv="expires" content="0">   
         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
         <meta http-equiv="description" content="This is my page">
         <!--
         <link rel="stylesheet" type="text/css" href="styles.css">
         -->
    </head>
    <body>
         <f:view>
              <h:form>
         <h:dataTable border="3" value="#{bla.all}" var="currentRow">
                          <h:column>
                            <f:facet name="header">
                                 <h:outputText value="Employee Name" />
                            </f:facet>
                  <h:inputText value="#{currentRow.employ}">
                            </h:inputText>
                       </h:column>
                          <h:column>
                            <f:facet name="header">
                                 <h:outputText value="Employee Number" />
                            </f:facet>
                            <h:inputText value="#{currentRow.id}"></h:inputText>
                       </h:column>
                       <h:column>
                       <f:facet name="header">
                       </f:facet>
                       <h:commandButton id="Delete" action="#{bla.insert}" value="Delete"></h:commandButton>
                  <h:commandButton id="Modify" action="#{bla.modify}" value="Modify"></h:commandButton>
                       </h:column>
                  </h:dataTable>
                   <h:commandButton id="Insert" action="#{bla.insert}" value="Insert"></h:commandButton>
               <%--h:outputText value="#{bla.sid}"></h:outputText--%>
               </h:form>
         </f:view>
    </body>
    </html>
    Faces-config file starts here
    <managed-bean>
              <description>Inserts a record</description>
              <managed-bean-name>bla</managed-bean-name>
              <managed-bean-class>redrose.RowEntry</managed-bean-class>
              <managed-bean-scope>session</managed-bean-scope>
         </managed-bean>     
         

  • Dynamically adding a row

    Hai
    I am stuck with how to dynamically add a new row to my jtable provided that I do not know in the first place how many rows of data will the user enter.
    Thanks a lot.

    Hi,
    Try
    ((DefaultTableModel)myTable.getModel()).addRow(object[] or Vector);
    Note that getModel() returns a TableModel which is read-only. However the actual model it will return (unless you have changed it) is a DefaultTableModel, which is writable. So you need to do the cast then you can add rows to your heart's conent.
    Hope this will help you.
    Anil.
    Developer Tecnical Support
    Sun Microsystems Inc,
    http://www.sun.com/developers/support

  • Dynamically adding a row and context binding

    Hi All
    i need to display existing values in DB in row wise
    Also there is a add button on click of this add button i need to insert a row along with the exiting rows
    and also bind a context to the new row.
    Finally on clicking of Save button i need to update this to a database table
    Please guide me how to insert a row dynamically and binding context to it
    client dont want to use table.
    Thanks
    Karthi D.
    Edited by: karthi D on Aug 22, 2008 6:35 AM

    Hi,
    Displaying table data in view without using table takes time and you need to work more.
    To display the table data follow the below steps
    1. Create the "TransparentContainer" UI element in view
    2. create the context node and attribute according to your table data
    3. get the table data and bind to context
    IPrivateSDNView.ITableDataNode node = wdContext.nodeTableData();
         IPrivateSDNView.ITableDataElement ele = null;
         for(int i=0;i<tableRecords.length;i++) {
              ele = node.createTableDataElement();
              ele.setId();  // set your data to all attributes
              node.addElement(ele);
    4.in wdDoModifyView get the "TransparentContainer" UI element and set the layout and col size (ex: 4)
    IWDTransparentContainer tContainer = (IWDTransparentContainer)view.getElement("TransparentContainer");
         IWDGridLayout gridLayout = (IWDGridLayout)tContainer.createLayout(IWDGridLayout.class);
         gridLayout.setColCount(4);
         tContainer.destroyAllChildren();
    5. Create the UI elements (textview, label ....) and add to tContainer
    IPrivateSDNView.ITableDataNode node = wdContext.nodeTableData();
         IWDTextView textView = null;
         int count = 0;
         for(int i=0;i<node.size();i++) {
              count = 0;          
              textView = (IWDTextView)view.createElement(IWDTextView.class,""i(count++));
              textView.setText(node.getTableDataElementAt(i).getAtt1());
              tContainer.addChild(textView);
              textView = (IWDTextView)view.createElement(IWDTextView.class,""i(count++));
              textView.setText(node.getEmpDataElementAt(i).getAtt2());
              tContainer.addChild(textView);          
    To insert records into the above table
    1. Create the form with your fields with add button with Action "Add"
    2. Create the context for this form
    3. In onActionAdd method add the element to TableData node context
    Let me know if you are not cleared with above code
    Thanks

  • Dynamically adding new rows and columns

    i want to have a button on my jsp page which shud add new rows dynamically. and same one for columns.
    how do i calculate the values across the rows on the forms
    I'm new to JSP. Please point me in the right direction...any tutorials or code will be helpful.
    thanks

    Well its a good question actually and the most needed one.
    Say 4 example u need a screen which should accepts the employee details in one screen
    and the user should be able to enter all the employee details in one screen and he should
    have a flexibility to change the previous details too.
    So 4 that u need to know 2 things:
    1) Using of JspBeans
    2) Using Vector
    I will give u a brief idea:
    So the bean is just a container been which has the methods say
    setEmployeeName(.....)
    getEmployeeName()
    So the basic logic is, the naming of html form elements and displaying multiple rows of elements.
    Say 4 eg, empname -> <input type=text name=empname<%= count%> value=<%= ....%>>
    So u should run the loop the size of ur vector times and every time u add a vector u should save all
    the data using same logic in ur vector and thatz it once u commit get all the values from the vector.
    Try this u will definitely get it,
    all da best,
    kiran
    kiran

  • Adding/deleting rows from a treeTable with a read-only view object

    Hello --
    I'm getting a JBO-25016 error when I go to delete a row from a treeTable. I want to create the hierarchy from a stored procedure, have the user add and remove nodes without calling back to the database. I will iterate through the tree and see what has changed and made the necessary updates on the database manually.
    What is the correct method for adding/removing rows form the UI component?
    Thanks!
    Tom

    Thank you, Amit! That did the trick.
    Edited by: Tom on Apr 28, 2011 11:51 AM

  • Adding Specific columns of dynamic internal table row into another column

    Hi Gurus,
    I need to add  few columns of a dynamic internal table row into another column:
    Article description hy01 hy02 total
    101      panza         10     12      22
    102      masht         12     12     24
    dynamic internal table is created and columns hy01 hy02.... can increase
    How to add the the values in hy01 hy 02... into total.
    Regards,
    Dep

    Hi,
    If you really want to have a dynamic table, then you will have to find a way to generate a whole new table, and then copy the data from the old table to the new one. There is no way to modify a type during runtime in ABAP.
    Here an example how to generate a dynamic table based on another internal table, hope this will help you.
    TYPE-POOLS: slis.
    PARAMETERS: p_nb_hy TYPE i DEFAULT 2. "Number of new HY columns to be added
    * Type ZST_T:
    *   matnr  TYPE matnr
    *   maktx  TYPE maktx
    *   hy01   TYPE i
    *   total  TYPE i
    TYPES: ty_t TYPE STANDARD TABLE OF zst_s.
    PERFORM main.
    *&      Form  main
    *       text
    FORM main.
      DATA: lt_fieldcat     TYPE slis_t_fieldcat_alv,
            lt_t            TYPE ty_t,
            lr_new_t        TYPE REF TO data.
      FIELD-SYMBOLS: <lt_new_t> TYPE STANDARD TABLE.
      "Add some lines to LT_T just to have something to display on screen
      DO 10 TIMES.
        APPEND INITIAL LINE TO lt_t.
      ENDDO.
      CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name = 'ZST_S'
        CHANGING
          ct_fieldcat      = lt_fieldcat.
      "Copy LT_T to LR_NEW_T
      PERFORM extend_and_copy_table USING lt_t p_nb_hy CHANGING lr_new_t lt_fieldcat.
      CLEAR lt_t. "Not needed anymore...
      ASSIGN lr_new_t->* TO <lt_new_t>.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          it_fieldcat = lt_fieldcat
        TABLES
          t_outtab    = <lt_new_t>.
    ENDFORM.                    "main
    *&      Form  extend_and_copy_table
    FORM extend_and_copy_table USING ut_t           TYPE STANDARD TABLE
                                     uv_nb_hy       TYPE i
                               CHANGING cr_t        TYPE REF TO data
                                        ct_fieldcat TYPE slis_t_fieldcat_alv
                               RAISING cx_sy_struct_creation cx_sy_table_creation.
      DATA: lo_tabledescr      TYPE REF TO cl_abap_tabledescr,
            lo_structdescr     TYPE REF TO cl_abap_structdescr,
            lo_new_structdescr TYPE REF TO cl_abap_structdescr,
            lo_new_tabledescr  TYPE REF TO cl_abap_tabledescr,
            lt_components      TYPE cl_abap_structdescr=>component_table,
            ls_component       TYPE cl_abap_structdescr=>component,
            lv_field_cnt       TYPE numc2,
            ls_fieldcat        TYPE slis_fieldcat_alv,
            lr_fieldcat        TYPE REF TO slis_fieldcat_alv.
      FIELD-SYMBOLS: <ls_old_s> TYPE ANY,
                     <lt_new_t> TYPE STANDARD TABLE,
                     <ls_new_s> TYPE ANY.
      "Get the list of all components from UT_T line structure
      lo_tabledescr  ?= cl_abap_tabledescr=>describe_by_data( ut_t ).
      lo_structdescr ?= lo_tabledescr->get_table_line_type( ).
      lt_components  = lo_structdescr->get_components( ).
      "The new columns will be from type of column HY01
      ls_component-type = lo_structdescr->get_component_type( 'HY01' ).
      "The new columns will have the same fieldcat info as column HY01
      READ TABLE ct_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'HY01'.
      "HY<lv_field_cnt> = new field name
      lv_field_cnt = uv_nb_hy + 1.
      "For each new column...
      DO uv_nb_hy TIMES.
        "Generate the new column field name
        CONCATENATE  'HY' lv_field_cnt INTO ls_component-name.
        ls_fieldcat-fieldname = ls_component-name.
        "Add the new field to the components of the new structure
        INSERT ls_component INTO lt_components INDEX 4.
        "Add the new field's fieldcat info to the fieldcat
        INSERT ls_fieldcat  INTO ct_fieldcat   INDEX 4.
        lv_field_cnt = lv_field_cnt - 1.
      ENDDO.
      "Adjust the COL_POS from fieldcat
      LOOP AT ct_fieldcat REFERENCE INTO lr_fieldcat.
        lr_fieldcat->col_pos = sy-tabix.
      ENDLOOP.
      "Create the new table
      lo_new_structdescr = cl_abap_structdescr=>create( p_components = lt_components ).
      lo_new_tabledescr  = cl_abap_tabledescr=>create( p_line_type = lo_new_structdescr ).
      CREATE DATA cr_t TYPE HANDLE lo_new_tabledescr.
      ASSIGN cr_t->* TO <lt_new_t>.
      "Copy all data from old to new table
      LOOP AT ut_t ASSIGNING <ls_old_s>.
        APPEND INITIAL LINE TO <lt_new_t> ASSIGNING <ls_new_s>.
        MOVE-CORRESPONDING <ls_old_s> TO <ls_new_s>.
      ENDLOOP.
    ENDFORM.                    "main

  • How to get cumulative decreasing values by substracting from the previous row.... in a dynamic added

    I have pdf table like this:-
    Header 1
    Header 2
    Header 3
    Header 4
    Header 5
    Header 6
    Header 7
    From
    To
    No. of Days
    Balance
    Date
    1
    2
    <ADD Button> / <Del Button>
    3
    4
    5
    This
    Row
    is
    730
    to
    be
    hidden
    DateFieldFrom
    DateFieldTo
    DateFieldTo-DateFieldFrom(Some No1.)
    Remaining1=uppervalue(730)-Some No1.
    Now when i click the <add  rows button>  rows are to be added and i have to get the valuesof Remaining2(Remaining1- Some No.2 )in the Added Balance Row
    how will i do this?

    Hi Luis,
    According to your description, you have a report with different dynamic columns. Now what you want is show your user percentage growth in your matrix report after your user select two of those columns (I think you may use parameter to achieve your “checkbox”
    function). Is my understanding correct?
    In Reporting Service, we can’t calculate dynamic columns with our build-in arrogation functions. So we need to add custom code into our report, and call those functions which defined in custom code in our expression. We have tested your scenario in our local
    environment. Here are steps and screenshots for your reference.
    Go to your Report Properties, add the custom code below into your report:
    Dim Shared Num1 As Double
    Dim shared Num2 As Double
    Public Function GetCalification(Calification as Double,Type as String,Type2 as String) 
    If Type = Type2 Then
       Num1=Calification
    Else
       Num2=Calification
    End If 
    Return Calification 
    End Function
    Public Function GetPec()
    Return (Num2-Num1)/Num1
    End function
    Create a matrix. Put PilarName into Row field, put Period into Column field. In Data field, put the expression below into the textbox:
    =Code.GetCalification(Fields!Calification.Value,Fields!Period.Value,Parameters!Period.Value(0))
    In our sample report, we created a parameter (named Period) for selecting two columns. You can replace “Parameters!Period.Value(0)” with your own parameter.
    Add an outside column at right (%Growth), put the expression below into the textbox:
    =Code.GetPec()
    Save and preview. The matrix and result looks like below:
    Reference:
    Custom Code and Assembly References in Expressions in Report Designer (SSRS)
    If you have any question, please feel free to ask.
    Best Regards,
    Simon Hou

  • Reading the Data from dynamically added rows of a table...

    Hi,
                  I am using adobe interactive form (WD ABAP) in which i am adding the table rows dynamically (using Jscript code).  I have to fech these data into an internal table. But I can read only the first row data..
                  Also While adding rows dynamically the same data is repeating for the consecutive rows..
                  I have found many similar posts in sdn, but i cannot get the solution. They have mentioned about adding in WDDOINIT method. Can anyone explain me what should be done,..?
    1) How to solve repeatative data while adding rows..?
    2) How to read dynamically added row data during runtime into internal table..?
    Thanks,
    Surya.

    Discussed @ SDN lot of time before. Have a look at any of below threads:-
    Dynamic table in interactive form...
    Make dynamic tables in Adobe Interactive forms
    Adding Rows dynamically upon clicking the button
    How to get values to WebDynpro ABAP from dynamic table?
    Chintan

  • Add null rows in WDDOINIT  for fetching data from dynamically added rows..

    Hi,,
    I have to fetch data from a dynamically added rows of a table.
    I have followed / gone through many forums but they ddnot mention how to add null rows in the initialization method..
    I am using WD Abap..
    Can anyone help how to bind null rows in WDDOINIT method..?
    Thanks,
    Surya

    Discussed @ SDN lot of time before. Have a look at any of below threads:-
    Dynamic table in interactive form...
    Make dynamic tables in Adobe Interactive forms
    Adding Rows dynamically upon clicking the button
    How to get values to WebDynpro ABAP from dynamic table?
    Chintan

  • How to load a class dynamically (via reflection) in a jsf-component

    Hi all,
    I am writing my own jsf component and I would like to do it generically. Therefore I have an attribute, where the developer can pass a fully qualified classname, which I want to use to instantiate. But I have a Problem with the classloaders, everytime I get a ClassNotFound-Exception during debugging.
    Does anybody know how it is possible, to to get the most parent classloader?
    Currently I am even not able to load a class, which is in the same package like all other compontent-classes.
    Thank you very much in advance
    Thomas

    Within web applications, I believe it is recommended to use Thread.getContextClassLoader(). Keep in mind that web applications require different classloader semantics than regular Java applications. The class loader which gets resources from the WAR is favored over others, even when this violates the normal class loading conventions.

  • Why data are not getting poulated in dynamically added tab in a tab navigator???

    Hi All,
    I am facing a very strange problem and need you expert opinion on this. Ok so the problem goes like this:
    In my application i have a tab navigator where i have 2 fixed tabs say tab A and tab B. In tab B I have a data grid where All the user name are getting populated. Once the user clicks on any datagrid row i am dynamically adding a new tab based on username , so if in my datagrid u1,u2 and u3 are getting displayed then once you clik on u1 a new tab called u1 is getting displayed. Code for this goes like this:
    var vbox1: VBox= new VBox();
    box1.label=mydatagrid.selectedItem.uName;
    var sde:* = new searchDetails();
    vbox1.addChild(sde);
    myTabnavigator.addChild(vBox1);
    Application.application.searchdetails.displayall();
    I have created a component called searchDetails where i have designed the page wit various fields for this tab.This also has a method called displayall() which is populating the data in all fields using php an my sql where i have designed the page wit various fields for this tab.
    New tab is getting displayed perfectly. My problem is once the tab is getting displayed fields are not getting populated with data.
    Please let me know what wrong i am doing. I am really struggling

    Hmm.. you have to assign text to the labelfields on creation complete not before that, the fllow will be like this
    var vbox1: VBox= new VBox();
    var sde:* = new searchDetails();
    vbox1.addEventListener(creationcompleteevent,function);
    vbox1.addChild(sde);
    myTabnavigator.addChild(vBox1);
    function(e:event):void{
    box1.label = "text";

  • How to obtain the row data in the component datatable?

    if I want to edit a row data, and then know which row is edited in the component datatable, and how to do?
    How to obtain the row data in the component datatable, and update it to database, not simplely edit a simple table
    Any ideas? Thanks

    Thank you very much for your help Alexander !
    It's quite confusing when you leave Struts and try to adapt your projects for JSF for the first time...
    I wanted to click on a row with a "onMouseClick" on the TR tag like I used to do in Struts/JSTL. But it seems to be impossible in a dataTable.
    Ok then. I've added a column at the end of the row with an icon.
    But eventually I didn't need to declare link parameters.
    In my BackingBean I did like this :
    public String selectEventForUpdate() throws IllegalAccessException, InvocationTargetException {
            PortletAgenda event = (PortletAgenda) JSFUtils.getInRequestMap("event");
            BeanUtils.copyProperties(this, event);
            return null;
       }JSFUtils.getInRequestMap(...) is a method I wrote in a util object :
    public static Object getInRequestMap(String name) {
            Object res = null;
            Map requestMap=FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
            if (requestMap!=null) {
                res=requestMap.get(name);
            return res;
    }  " event " is the name of the item in my dataTable list.
    My backingBean has the same attributes as "event".
    So when the page is reloaded I have a backingBean full with the selected properties to edit/update.
    Thanks to your reply I realized that putting this form in the middle of the dataTable seems to be impossible.
    So I put this form in a floating DIV in front of the table with a shadow.
    It works :o) !
    But I'm a little bit disapointed to be honest...
    I used to build my web applications with Struts and JSTL and doing this kind of interface was really easy.
    I've decided 3 days ago to convert into JSF because the "GUI Layer" seemed to be improved.
    But now I realize that I cannot put a onMouseOver and onMouseClick on a row and I cannot display a different row in the middle of a table....
    I think it's a shame because there is a facet for header and footer.
    And it would be great if we could create our own personal facet that appears only if a condition is true.
    For exemple " if the current item id is the same as the request parameter id then display the following facet content ....... (with a panel group and a form inside to update the row) "
    It's easy to do that with JSTL thanks to c:forEach and c:if but it seems to be impossible to use JSTL tags like this during the dataTable iteration.
    And JSF tags seems to have no logical tags like " if " or loops that can be nested in dataTable.
    I really need to realize this interface (you click on a row then an edit form appears where you clicked).
    Do I have to write a component myself that extends dataTable?
    Do you know if writing such a component is hard to do for a beginner like me?
    (I've juste discovered JSF 3 days ago and I've used Struts/JSTL for 2 years til now)
    I'd be glad to have much advices from you about that.
    Regards

  • How to add af:inputFile dynamically within each row of table?

    I need to add af:inputfile dynamically within each row of af:table, when the user hits a commandlink at the bottom of each row.
    I have tried wrapping af:inputfile with af:foreach:
    <af:table value="Bean.rows" var="row">
    <af:column>
    <af:forEach step="1" begin="1"
    end="#{Bean.filecount}">
    <af:inputFile label="Please upload a file"
    id="1"
    valueChangeListener="#{Bean.onClickUpload}"/>
    </af:forEach>
    <af:commandLink text="Add more file" id="cl3" actionListener="#{Bean.onAddFile}"/>
    </af:column>
    </af:table>
    in Bean.onAddFile, I have:
    public void onAddFile(ActionEvent event){
    filecount++;
    It works but there's no independent control of each row. When I click one commandlink, All rows now have 2,3,.... af:inputFile. The change affects all rows.
    The requirement should be that when I click one commandlink in a row, only that row shows additional af:inputFile.
    So why not leverage the row variable of the table, right? That's what I did, I changed the end attribute of foreach to the following:
    <af:forEach step="1" begin="1"
    end="#{row.fileRowCount}">
    the backing bean method changed to the following:
    public void onAddFile(ActionEvent event){
    int filerowcount = (Integer)JsfUtil.resolveExpression("#{row.fileRowCount}");
    Integer newcount = filerowcount+1;
    JsfUtil.setExpressionValue("#{row.fileRowCount}", newcount.toString());
    Note that "row" refers to an object that has a int field called "filerowcount". And the initial value is "1".
    Just for testing, I also added <af:outputText value="row.filerowcount"/>, to see if the count is what I expected it to be.
    I didn't see the any af:inputfile this time, but the outtext is showing the filerowcount properly. When I click the commandlink, the number changed to 2,3,..... Also in the backing bean newcount and filerowcount is incrementing correctly.
    I know the begin, end attribute means the index of a for loop. So I changed begin="0", it now shows one row of af:inputfile, but when I click the commandlink, no additional rows are shown. (Although the outputtext of filerowcount keeps incrementing as expected.
    So to sum up, the END attribute of af:foreach row CAN pick up the value from the backing bean and render af:inputfile dynamically, but it CANNOT pick up the value from the the field in VAR object of a table.
    Is is a known issue? Or I did something by mistake.
    Is there any other way to add af:inputFile dynamically within each row of table?
    Any advice/comment is appreciated.

    Hi,
    here is how it goes:
    - add an af:inputFile to the column and set its rendered property to point to a managed bean property. The managed bean property has a default value of "false" and the bean should be in viewScope
    - create another variable that holds the row number that should show the inputFile component. This is updated by the command link and evaluated by the get method of the managed bean property controlling the inputFile visibility
    - Define a property name for the table varStatus property
    - For the command link, define a attribute f:attribute with the name rowNumber and set its value to #{varStatusPropertyName.index}
    - define an action listener for the command link
    public void showInputFile(ActionEvent actionEvent){
    int rowNumber = ((RichCommandLink) actionEvent.getSource()).getAttributes().get("varStatusPropertyName");
    //set the value on the internal variable
    - In the getter of the property that defines the render value of the inputFile, use code like this
    public boolean get<whatever name you use>(){
    //access the following EL from Java #{varStatusPropertyName.index}
    int currentRenderedRow = <EL result here>;
    // compare the current row index with the one set by the command link, which is stored in the variable of the managed bean
    if true return true
    else return false
    - Set the PartialTriggers property of the table to point to the commandLink ID so the table is repainted when the command link is pressed
    This should then render the fileInput component for a single row (the one you clicked the command link in)
    Frank

Maybe you are looking for

  • Timed out issue in jsp page!

    Dears, It is really amazing for me to see this issue in my application which I deployed in Oracle Application Server 10g r2. I am using JDeveloper 10g to create jsp pages. On one jsp page i am displaying 15 html tables for a report. All tables have 1

  • Explorer.exe hangs on resolution changes

    I seem to have to have a very persistant, very reproducable and very annoying problem with explorer.exe just completely "hanging" frequently. This started happening near the end of November, about a month after I used Windows 7 (professional x64) wit

  • Price difference account posting for return of goods using MR11

    HI SAP Expert When we are running MR11 for goods receipt transaction system is posting reversal document to price difference account instead of inventory account. In this case relevant details are :- Price control for Material is S . PO QTY 190( Purc

  • SRM 7 - Contract replication from ERP to SRM

    Hi all, We have SRM 7 and ECC 6.0 and we have a requirement to have contract handling for invoices functionality, in SRM, in order to create invoices with reference to a contract directly. We want to have ERP system as the central repository for all

  • [SOLVED] Console Font Gets Reset During Boot

    I've recently switched to Arch Linux and am quite happy with it.  I've never had so much fun with Linux until a friend recommended Arch.  I have since installed it on both my MacBook Pro and Mac mini.  Everything has been pretty smooth, but I do have