Jsp 使用显示标记为表的每一行提供编辑和删除按钮
我使用display标记在JSP上的表中显示数据(使用struts 2)。现在我想为每一行提供两个链接,一个用于编辑,一个用于删除该行 我的jsp结构和我目前正在尝试的是:Jsp 使用显示标记为表的每一行提供编辑和删除按钮,jsp,dojo,struts2,action,displaytag,Jsp,Dojo,Struts2,Action,Displaytag,我使用display标记在JSP上的表中显示数据(使用struts 2)。现在我想为每一行提供两个链接,一个用于编辑,一个用于删除该行 我的jsp结构和我目前正在尝试的是: <s:url id="editReport" action="editReport" /> <sd:div href="%{editReport}" listenTopics="editReport" formId="actionForm" showLoadingText="false" preload="
<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:autocompleter label="Customer " name="customer" list="customerList" valueNotifyTopics="updLists" autoComplete="false" searchType="substring"/>
<sd:autocompleter 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>
//这是没有得到填充。
编辑
删除
我在这里面临的问题是,与display标记中的每一行关联的表单的名称
。因此,当我尝试访问action类中的rowId
变量时,无论单击哪一行的按钮,我都只会获取第一行的rowId值
我在stack overflow和google上看到了一些使用URL重写的例子,但我不想使用这些
请告知
谢谢 我认为这可以归结为如何使用dojo发布事件。我不太清楚dojo是如何工作的,但你的按钮可以
dojo.event.topic.publish('editReport')
因此,我不知道“editReport”事件的订阅者如何知道您要删除哪一行,以及必须删除哪一行
显示可以将参数传递给发布函数。将rowId作为参数传递给subscribe函数,并在编辑/删除行的函数中使用此参数
编辑:
页面末尾显示了一个示例,该示例动态更改div的href,然后刷新div。我将使用类似的策略:使用唯一的表单(而不是每行一个表单)来编辑(或删除)页面中的报告。让每个行链接将事件发布到以行ID为参数的主题。让JavaScript函数监听主题,动态更改唯一表单的隐藏rowId字段的值,然后告诉div刷新自己。我认为这可以归结为如何使用dojo发布事件。我不太清楚dojo是如何工作的,但你的按钮可以
dojo.event.topic.publish('editReport')
因此,我不知道“editReport”事件的订阅者如何知道您要删除哪一行,以及必须删除哪一行
显示可以将参数传递给发布函数。将rowId作为参数传递给subscribe函数,并在编辑/删除行的函数中使用此参数
编辑:
页面末尾显示了一个示例,该示例动态更改div的href,然后刷新div。我将使用类似的策略:使用唯一的表单(而不是每行一个表单)来编辑(或删除)页面中的报告。让每个行链接将事件发布到以行ID为参数的主题。让JavaScript函数监听主题,动态更改唯一表单的隐藏rowId字段的值,然后告诉div刷新自己。对于那些仍然坚持要做什么的人,下面是我最后为使其工作所做的 JSP:
<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:autocompleter label="Customer " name="customer" list="customerList" valueNotifyTopics="updLists" autoComplete="false" searchType="substring"/>
<sd:autocompleter 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:hidden id="filedOnDate" name="filedOnDate"/>
<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" refreshOnShow="true" preload="false">
<s:form id="actionForm" name="actionForm" action="">
<disp:table uid="dayReport" 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 title="Action">
<s:a href="" onclick="editEvent(event,%{#attr.dayReport.rowId});">Edit</s:a><br>
<s:a href="" onclick="deleteEvent(event,%{#attr.dayReport.rowId});">Delete</s:a>
</disp:column>
</disp:table>
<s:hidden id="rowId" name="rowId"/>
</s:form>
</sd:div>
这就是这里发生的事情:
单击编辑或删除时,将调用js中的相应函数(并传递rowId)。每个函数首先将隐藏字段的值设置为rowId值(该值作为函数的参数),然后它将punlishe一个主题。当主题发布时,repective div调用一个操作并使用新内容刷新。在这里,我在div标记中提到了表单的表单id,因此操作具有隐藏字段的值,该字段在javascript中被设置为rowId
希望这有帮助
Kanishk对于那些仍然坚持要做的事情的人,这里是我最后为让它工作所做的 JSP:
<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:autocompleter label="Customer " name="customer" list="customerList" valueNotifyTopics="updLists" autoComplete="false" searchType="substring"/>
<sd:autocompleter 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:hidden id="filedOnDate" name="filedOnDate"/>
<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" refreshOnShow="true" preload="false">
<s:form id="actionForm" name="actionForm" action="">
<disp:table uid="dayReport" 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 title="Action">
<s:a href="" onclick="editEvent(event,%{#attr.dayReport.rowId});">Edit</s:a><br>
<s:a href="" onclick="deleteEvent(event,%{#attr.dayReport.rowId});">Delete</s:a>
</disp:column>
</disp:table>
<s:hidden id="rowId" name="rowId"/>
</s:form>
</sd:div>
这就是这里发生的事情:
单击编辑或删除时,将调用js中的相应函数(并传递rowId)。每个函数首先将隐藏字段的值设置为rowId值(该值作为函数的参数),然后它将punlishe一个主题。当主题发布时,repective div调用一个操作并使用新内容刷新。在这里,我在div标记中提到了表单的表单id,因此操作具有隐藏字段的值,该字段在javascript中被设置为rowId
希望这有帮助
Kanishk此问题不应被标记为javascript@Munter我希望,如果我能在javascript中设置一个请求参数或类似的东西,然后在action类中访问相同的参数,它应该可以做到这一点。然后,我将能够将参数值设置为“rowId”,并在action类中访问它,以了解单击了哪一行。有没有办法做到这一点?这个问题不应该被标记为javascript@Munter我希望,如果我能在javascript中设置一个请求参数或类似的东西,然后在action类中访问相同的参数,它应该可以做到这一点。然后,我将能够将参数值设置为“rowId”,并在action类中访问它,以了解单击了哪一行。有没有办法做到这一点?这里我不使用subsciber函数。div“侦听”某个主题,当该主题“发布”时,该div将从提到的href(即action类)中刷新其内容。是否有一种方法可以在javascript中设置参数或会话变量,稍后可以在action类中访问。这是一个好方法吗?div将formId作为一个属性值,该属性值指示其字段将被序列化并作为参数传递给action类的表单。但是这里有多个表单(每行1个),如何为每个表单指定不同的名称。或者,实现此场景的其他方法是什么。谢谢JB。有些部分我懂了,有些部分我不懂。所以我会尝试一下,然后再给你回复,让它发挥作用。谢谢只有一种形式的想法