I am using display tag to display data in a table on a JSP. Now I want to give two links for each row, one for editing & one for deleting the row.
There are some posts on stackoverflow regarding the same([question]: How to use multiple buttons (one on each line) for JSP page using Struts2 , [question]: Get value from a row in a JSP page using display tag , [question]: Retrieving Value from Row in Struts2 Table While using Displaytag), but I could not find a solution that works for me.
And google gave me ( .2/example-decorator-link.jsp ), but it uses URL rewriting which I don't want to use and moreover demonstrates use with struts(I am using struts 2).
My jsp structure and what I am currently trying is :
<s:url id="editReport" action="editReport" />
<sd:div href="%{editReport}" listenTopics="editReport" formId="actionForm" showLoadingText="false" preload="false">
<s:url id="updLists" action="updLists" />
<sd:div href="%{updLists}" listenTopics="updLists" formId="enterDayReport" showLoadingText="false" preload="false">
<s:form id="enterDayReport" action="enterDayReport">
<sd:autopleter label="Customer " name="customer" list="customerList" valueNotifyTopics="updLists" autoComplete="false" searchType="substring"/>
<sd:autopleter label="Contact " name="contact" list="contactList" valueNotifyTopics="updLists" autoComplete="false" searchType="substring"/>
<s:select label="Stage " name="stage" list="stageList" headerKey="0" headerValue="Select" />
<s:select label="Type " name="type" list="typeList" headerKey="0" headerValue="Select" />
<sd:datetimepicker label="Date" name="date" formatLength="small" displayFormat="dd - MMM - yyyy"/>
<s:textarea label="Summary" name="summary" cols="40" rows="10"/>
<s:submit value="Save Report"/>
</s:form>
</sd:div>
</sd:div>
<s:url id="deleteReport" action="deleteReport" />
<sd:div href="%{deleteReport}" listenTopics="deleteReport" formId="actionForm" showLoadingText="false" preload="false">
<disp:table name="dayReportsList" export="true" class="dataTable">
<disp:column property="contactCode" title="Contact"/>
<disp:column property="customerCode" title="Customer"/>
<disp:column property="stage" title="Stage"/>
<disp:column property="type" title="Type"/>
<disp:column property="summary" title="Summary"/>
<disp:column property="reportDate" title="Date" format="{0,date,dd-MMM-yyyy}" />
<disp:column property="rowId" href="%{editReport}" paramId="rowID" paramProperty="rowId" title="Action">
<s:form id="actionForm" name="actionForm">
<s:hidden id="rowId" name="rowId" value="%{rowId}"/> // This is not getting populated.
<s:a onclick="dojo.event.topic.publish('editReport')">Edit<s:property value="rowId"/></s:a><br>
<s:a onclick="dojo.event.topic.publish('deleteReport')">Delete</s:a>
</s:form>
</disp:column>
</disp:table>
</sd:div>
Here the only problem I am facing is that the hidden
field in the display tag table is not getting populated with the "rowId" value which is a part of "dayReportsList".
The idea here is that if a user clicks on edit, the data for the row gets populated in the form for editing. And if the user clicks delete, the row gets deleted from the database and the display table gets updated on JSP.
Please advise.
Thanks!!
I am using display tag to display data in a table on a JSP. Now I want to give two links for each row, one for editing & one for deleting the row.
There are some posts on stackoverflow regarding the same([question]: How to use multiple buttons (one on each line) for JSP page using Struts2 , [question]: Get value from a row in a JSP page using display tag , [question]: Retrieving Value from Row in Struts2 Table While using Displaytag), but I could not find a solution that works for me.
And google gave me ( http://demo.displaytag/displaytag-examples-1.2/example-decorator-link.jsp ), but it uses URL rewriting which I don't want to use and moreover demonstrates use with struts(I am using struts 2).
My jsp structure and what I am currently trying is :
<s:url id="editReport" action="editReport" />
<sd:div href="%{editReport}" listenTopics="editReport" formId="actionForm" showLoadingText="false" preload="false">
<s:url id="updLists" action="updLists" />
<sd:div href="%{updLists}" listenTopics="updLists" formId="enterDayReport" showLoadingText="false" preload="false">
<s:form id="enterDayReport" action="enterDayReport">
<sd:autopleter label="Customer " name="customer" list="customerList" valueNotifyTopics="updLists" autoComplete="false" searchType="substring"/>
<sd:autopleter label="Contact " name="contact" list="contactList" valueNotifyTopics="updLists" autoComplete="false" searchType="substring"/>
<s:select label="Stage " name="stage" list="stageList" headerKey="0" headerValue="Select" />
<s:select label="Type " name="type" list="typeList" headerKey="0" headerValue="Select" />
<sd:datetimepicker label="Date" name="date" formatLength="small" displayFormat="dd - MMM - yyyy"/>
<s:textarea label="Summary" name="summary" cols="40" rows="10"/>
<s:submit value="Save Report"/>
</s:form>
</sd:div>
</sd:div>
<s:url id="deleteReport" action="deleteReport" />
<sd:div href="%{deleteReport}" listenTopics="deleteReport" formId="actionForm" showLoadingText="false" preload="false">
<disp:table name="dayReportsList" export="true" class="dataTable">
<disp:column property="contactCode" title="Contact"/>
<disp:column property="customerCode" title="Customer"/>
<disp:column property="stage" title="Stage"/>
<disp:column property="type" title="Type"/>
<disp:column property="summary" title="Summary"/>
<disp:column property="reportDate" title="Date" format="{0,date,dd-MMM-yyyy}" />
<disp:column property="rowId" href="%{editReport}" paramId="rowID" paramProperty="rowId" title="Action">
<s:form id="actionForm" name="actionForm">
<s:hidden id="rowId" name="rowId" value="%{rowId}"/> // This is not getting populated.
<s:a onclick="dojo.event.topic.publish('editReport')">Edit<s:property value="rowId"/></s:a><br>
<s:a onclick="dojo.event.topic.publish('deleteReport')">Delete</s:a>
</s:form>
</disp:column>
</disp:table>
</sd:div>
Here the only problem I am facing is that the hidden
field in the display tag table is not getting populated with the "rowId" value which is a part of "dayReportsList".
The idea here is that if a user clicks on edit, the data for the row gets populated in the form for editing. And if the user clicks delete, the row gets deleted from the database and the display table gets updated on JSP.
Please advise.
Thanks!!
Share Improve this question edited May 23, 2017 at 11:58 CommunityBot 11 silver badge asked Dec 14, 2011 at 11:53 kanishkkanishk 7434 gold badges15 silver badges32 bronze badges 4- i am not sure how display tag works but if the list is getting iterated than element should be on top of value stack – Umesh Awasthi Commented Dec 14, 2011 at 12:59
- Okz, still thanks for your attention. – kanishk Commented Dec 14, 2011 at 18:36
- @kanishk Hi, I too facing the same problem, Can you please tell me how can I over e this. here my link thanking you very much in advance stackoverflow./questions/20812145/… – Prabha Commented Dec 28, 2013 at 7:57
- The answer below should be helpful. – kanishk Commented Dec 28, 2013 at 9:41
2 Answers
Reset to default 1The current element of the list is available through the page context attribute "foobar" if the display:table
tag has the attribute uid="foobar"
(or id="foobar"
). See http://www.displaytag/1.2/displaytag/tagreference.html
Display Tag uses Implicit Objects to store the row number. Here is an example from the Display Tag documentation:
<display table id="row" name="mylist">
<display:column title="row number" >
<c:out value="${row_rowNum}"/>
</display:column>
<display:column title="name" >
<c:out value="${row.first_name}"/>
<c:out value="${row.last_name}"/>
</display:column>
</display:table>
So you can use EL to access the row number which is stored as an automatically created object. Its name is defined by your id
variable (in this case row
) with appended _rowNum
(in this case resulting in ${row_rowNum}
).
Be aware that the numbering starts at 1, not at 0.