共享同一个bean的jsp portlet选项卡

时间:2012-10-16 10:40:58

标签: java spring jsp tabs portlet

我需要在以这种方式定义的两个标签中共享同一个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:

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

但我不知道如何让2个jsp共享同一个bean。 我需要在一个选项卡中填充bean的一些数据,并在另一个选项卡上填充一个列表(在同一个bean中)。 填充完所有数据后,从第一个选项卡提交,我将需要控制器中的整个bean(第一个选项卡中的数据和第二个选项卡中的列表) 我很擅长使用p​​ortlet,spring和所有这些东西,所以任何帮助都会很棒!

这可能吗??

1 个答案:

答案 0 :(得分:1)

如果您想以某种方式记住modelAttribute的属性,这些属性不在当前标签上,您可以通过多种方式执行此操作:

  • 使用modelAttribute注释在会话中保留@SessionAttributes。这可能是最简单的方法,它完全符合您的要求 - 使JSP“共享”相同的bean - 但我非常不鼓励这样做作为REST倡导者,因为会话在这里相当过分(不是说甚至可能目前使用portlet构建RESTful应用程序。
  • 将第二个标签页中第一个标签中的值保存在隐藏的输入中。
  • 保留Cookie中第一个标签的值,并在提交请求时使用第二个标签modelAttribute将其合并

我认为后两者非常相似,但是出于一般目的,隐藏的输入可能更容易实现(它们可能需要很少甚至没有控制器代码,例如用于正确的验证)。