2

このように定義された 2 つのタブで同じ Bean を共有する必要があります。

<fmt:message var="tabNames" key="message.tab.alta" />


<c:set var="tabValues" value="valtab01,valtab02" />


<portlet:renderURL var="URL01" >
        <portlet:param name="action" value="${ServletContextKeys.SC_INSERT}" />
    <portlet:param name="${ServletContextKeys.SC_TAB_INSERT}" value="valtab01" />
</portlet:renderURL>

<portlet:renderURL var="URL02" >
     <portlet:param name="action" value="${ServletContextKeys.SC_ADD_LIST}" />
     <portlet:param name="${ServletContextKeys.SC_TAB_INSERT}" value="valtab02" />
</portlet:renderURL>

<liferay-ui:tabs 
     names="${tabNames}"
     tabsValues="${tabEscrituraValues}"
     param="${ServletContextKeys.SC_TAB_INSERT}"
     url0="${URL01}"
     url1="${URL02}"
     value="${insert_tabs}"
  />

したがって、2 つのタブを表す 2 つの JSP で Bean を 1 つだけ定義する必要があります。

    <form:form id="formInsert" action="action01" method="post" modelAttribute="myBean" enctype="multipart/form-data">

しかし、2 つの jsp で同じ Bean を共有する方法がわかりません。1 つのタブに Bean の一部のデータを入力し、もう 1 つのタブに (同じ Bean 内の) 1 つのリストを入力する必要があります。すべてのデータが入力されたら、最初のタブから送信します。コントローラーで Bean 全体が必要になります (最初のタブのデータと 2 番目のタブのリスト)。このすべてのものなので、どんな助けも素晴らしいでしょう!

これは可能ですか..?

4

1 に答える 1

1

modelAttribute現在のタブにないプロパティを何らかの方法で覚えておきたい場合は、いくつかの方法でこれを行うことができます。

  • 注釈modelAttributeを使用してセッションを永続化します。@SessionAttributesこれはおそらく最も簡単な方法であり、文字通りあなたが望むことを行います – JSP が同じ Bean を「共有」します – しかし、REST の支持者としてこれを行うことは強くお勧めしません。現在、ポートレットを使用して RESTful アプリケーションを構築しています)。
  • 非表示の入力の 2 番目のタブのフォームで最初のタブの値を保持します。
  • 最初のタブの値を Cookie に保持し、modelAttribute送信要求時に 2 番目のタブと融合します

後者の 2 つは非常に似ていると思いますが、一般的な目的では、隠し入力の方がおそらく実装が簡単です (適切な検証などのために、コントローラー コードはほとんどまたはまったく必要ない場合があります)。

于 2012-12-21T09:38:34.567 に答える