2011-12-19 7 views
1

私は表示タグを使ってJSP上のテーブルにデータを表示しています(struts 2を使用)。ここでは、各行に2つのリンクを付けたいと思います.1つは行を削除するための編集用の&です。表示タグを使用してテーブルの各行に編集と削除ボタンを提供

私のJSPの構造と私は現在しようとしていますされています。私はここに直面しています問題は、表示タグのすべての行に関連付けられたフォームのnameが同じである、ということである

<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> 

。したがって、アクションクラスの変数rowIdにアクセスしようとすると、どの行がクリックされても、最初の行のrowIdの値だけが取得されます。

私は、URLの書き換えを使用するスタックオーバーフローとgoogleのいくつかの例を見ましたが、私はそれを使いたくありません。

お知らせください。

ありがとうございます!

+0

私は期待していた@Munterこの問題ではJavaScript – Munter

+0

としてタグ付けされるべきではないと私はJavaScriptでそのようなリクエストパラメータか何かを設定し、同じにアクセスすることができればアクションクラスでは、それはトリックを行う必要があります。次に、パラメータ値を 'rowId'に設定し、アクションクラスでその値にアクセスして、クリックされた行を知ることができます。これを行う方法はありますか? – kanishk

答えて

1

私はdojoを使ってイベントを公開する方法にまでこだわっていると思います。道場がどのように動作するか私にはよくわかりませんが、あなたのボタンはので、私は「editReport」イベントへの加入者が削除しようとしているどの行を知っているので、可能性がどのように表示されていない

dojo.event.topic.publish('editReport') 

を行うました行を削除する必要があります。

documentation for publishは、引数がパブリッシュ関数に渡されることを示しています。引数としてrowIdをsubscribe関数に渡し、行を編集/削除する関数でこの引数を使用します。

編集:

ページhttp://struts.apache.org/2.1.8/docs/ajax-div-template.htmlの端部は、動的にDIVのHREFを変更してDIVを更新例を示しています。同様の戦略を使用します:ページ内のレポートを編集(または削除)するために、一意のフォーム(行ごとに1つのフォームではなく)を使用します。各行のリンクに行IDを引数としてイベントをトピックにパブリッシュさせる。トピックをリッスンしているJavaScript関数が、一意のフォームの非表示のrowIdフィールドの値を動的に変更して、divをリフレッシュするように指示します。

+0

ここで私はサブビザ機能を使用していません。 divはトピックを「リッスン」し、そのトピックが「公開」されると、このdivはその内容を前述のhref(つまりアクションクラス)からリフレッシュします。 javascriptでパラメータやセッション変数を設定する方法はありますか。後でアクションクラスでアクセスできます。それは良いアプローチだろうか? – kanishk

+0

divはフィールドがシリアル化され、パラメータとしてアクションクラスに渡されるフォームを示す属性値としてformIdをとります。しかし、ここでは、フォームごとに異なる名前を指定するには、複数のフォーム(各行に1つ)があります。または、このシナリオを実装する他の方法は何ですか。 – kanishk

+0

あなたはこのスレッドを忘れていないといいですね:) – kanishk

0

何が行われるべきかにまだまだ固執している人にとっては、私が最後にそれを働かせたのです。

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ファイル:

function editEvent(e,rowId) 
{ 
    dojo.byId('rowId').value=rowId; 
    dojo.event.topic.publish('editReport'); 
} 

function deleteEvent(e,rowId) 
{ 
    dojo.byId('rowId').value=rowId; 
    dojo.event.topic.publish('deleteReport'); 
} 

これは、ここで何が起こっているかである。

編集や削除をクリックすると、jsファイル内の各関数であります呼び出されます(rowIdは渡されます)。各関数は、最初に隠しフィールドの値をrowId値(関数のパラメータとして提供される)に設定し、次にトピックをパンチします。トピックが公開されると、re divはアクションを呼び出し、新しいコンテンツでリフレッシュされます。ここではdivタグのフォームのフォームIDを説明しました。そのアクションはJavaScriptのrowIdに設定されている隠しフィールドの値を持っています。

希望これは

Kanishkを支援

関連する問題