استرداد القيمة من الصف في جدول Struts2 أثناء استخدام DisplayTag
-
29-09-2019 - |
سؤال
أدرك أن هذا أمر إعادة نشر إلى حد ما ، لكنني أشعر أن إعادة نشر سؤالي سيجعل الأمور أكثر وضوحًا.
فيما يلي رمز الجدول الخاص بي في صفحة JSP الخاصة بي:
<display:table name="table" pagesize="25" requestURI="">
<display:column title="Action" >
<s:form theme="simple">
<s:hidden key="cpc" />
<s:submit action="remove" value="Remove"
onclick="return confirm('Are you sure you want to delete this item?');"/>
<s:submit action="displayEdit" value="Edit"/>
</s:form>
</display:column>
<display:column property="cpc" title="CPC" sortable="true" headerClass="sortable"/>
<display:column property="companyName" title="Company Name" sortable="true" headerClass="sortable"/>
<display:column property="eventType" title="Event Type" sortable="true" headerClass="sortable"/>
<display:column property="industryType" title="Industry Type" sortable="true" headerClass="sortable"/>
<display:column property="previousEvents" sortable="true" headerClass="sortable"/>
<display:column property="creditNotifications" sortable="true" headerClass="sortable"/>
<display:column property="interimNotifyEnterprise" sortable="true" headerClass="sortable"/>
</display:table>
مصدر الجدول عبارة عن قائمة ArrayList ، حيث تعد Tablerow فئة غلاف من جميع الحقول المختلفة (ولديّ getters و etters لجميع الحقول). الآن عندما أتحقق من رمز مصدر HTML الخاص بي ، أرى هذا للحقل المخفي:
<input type="hidden" name="cpc" value="" id="displayResults_cpc"/>
لسبب ما ، لا توجد قيمة يمكن العثور عليها ... كانت تعمل بشكل جيد قبل أن أستخدم DisplayTag ، ولديّ getter و setter في فئة الإجراء الخاصة بي (الآن يعيد سلسلة فارغة).
تحرير: هذا هو رمز HTML لأول صفين:
<tr class="odd">
<td>
<form id="displayResults" name="displayResults" onsubmit="return true;" action="/CompanyNameTableManager/displayResults.action;jsessionid=566617D98154AB762002B06D9D1087CD" method="post">
<input type="hidden" name="cpc" value="" id="displayResults_cpc"/>
<input type="submit" id="displayResults_remove" name="action:remove" value="Remove" onclick="return confirm('Are you sure you want to delete this item?');"/>
<input type="submit" id="displayResults_displayEdit" name="action:displayEdit" value="Edit"/>
</form>
</td>
<td>10.1.1</td>
<td>Comapny A</td>
<td>abc</td>
<td>123</td>
<td>true</td>
<td>true</td>
<td>true</td></tr>
<tr class="even">
<td>
<form id="displayResults" name="displayResults" onsubmit="return true;" action="/CompanyNameTableManager/displayResults.action;jsessionid=566617D98154AB762002B06D9D1087CD" method="post">
<input type="hidden" name="cpc" value="" id="displayResults_cpc"/>
<input type="submit" id="displayResults_remove" name="action:remove" value="Remove" onclick="return confirm('Are you sure you want to delete this item?');"/>
<input type="submit" id="displayResults_displayEdit" name="action:displayEdit" value="Edit"/>
</form>
</td>
<td>10.1.2</td>
<td>Comapny B</td>
<td>abc</td>
<td>123</td>
<td>true</td>
<td>false</td>
<td>false</td></tr>
المحلول
أعتقد أنني خرجت من استخدام الأزرار ، ولكن إذا كان أي شخص فضوليًا ، فإليك ما انتهى بي الأمر باستخدامه بدلاً من ذلك:
<s:form theme="simple" method="post">
<display:table name="table" pagesize="25" requestURI="" uid="row">
<display:column title="Select">
<s:checkbox name="checked[%{#attr.row_rowNum - 1}]" fieldValue="%{#attr.row.cpc}" theme="simple"/>
</display:column>
<display:column property="cpc" title="CPC" sortable="true" headerClass="sortable"/>
<display:column property="companyName" title="Company Name" sortable="true" headerClass="sortable"/>
<display:column property="eventType" title="Event Type" sortable="true" headerClass="sortable"/>
<display:column property="industryType" title="Industry Type" sortable="true" headerClass="sortable"/>
<display:column property="previousEvents" sortable="true" headerClass="sortable"/>
<display:column property="creditNotifications" sortable="true" headerClass="sortable"/>
<display:column property="interimNotifyEnterprise" sortable="true" headerClass="sortable"/>
</display:table>
<s:submit action="remove" value="Remove"
onclick="return confirm('Are you sure you want to delete this item / these items?');"/>
<s:submit action="displayEdit" value="Edit"/>
<s:submit value="Add New Row" action="displayAdd"/>
</s:form>
نصائح أخرى
أعتقد أن ما يحدث على الأرجح هو أن المتطلبات الخاصة بالصفات للدعامات 2 والشاشة تتفاعل بشكل سيء ، أي أن taglib الآخر يقوم بمعالجة صفه الخاصة ، وتعبير ognl لـ "CPC" يتم تقييمها بشكل صحيح ، لأن الصف لا يتم دفعه بشكل صحيح إلى مكدس القيمة (إذا كنت لا تفهم ما أعنيه ، فهذا ليس حاسمًا).
نظرًا لأن لديك قيمة CPC في عمود آخر ، فهل من الممكن أن تستخدم JavaScript في onclick (أو onload) من الأزرار لاسترداد القيمة من الحقل المجاور؟