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,
akulaYou 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,
Sakethello 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>
-
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 AMHi,
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.
thanksWell 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!
TomThank 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,
DepHi,
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 -
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,
SuryaDiscussed @ 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
ThomasWithin 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 strugglingHmm.. 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? ThanksThank 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