Spring Web Flow - 重用子流的问题

时间:2011-09-30 04:14:39

标签: spring spring-webflow reusability

这可能是编码问题的设计问题。

我们有一个现有的订购界面,我们正试图将其转换为Spring Web Flow。对于每种产品,我们都有一些可重复使用的组件,如联系方式,合同细节,订单详情,定价......

现在我们想把它们放在一个页面上,但仍然可以重复使用,以便它可以用于不同的产品。

例如 - 我有一个服务详细信息页面,我在其中有三个不同的组件:

    Host Details
    IP Details
    Backup Details

这些组件中的每一个都需要在其他产品中重复使用,所以问题是如何实现这一目标?

问题:如果我创建一个名为“服务详细信息”的子流,那么关联的视图必须包含所有三个jsps,子流的模型属性将是一个复合属性,必须绑定所有上述值,如主机详细信息, IP详细信息,备份详细信息....

我永远不会重复使用整个页面,只需要在不同的页面上重用这些组件。

1 个答案:

答案 0 :(得分:1)

这不是特定于Webflow的 - 您想要创建与模型中的组件相关的可重用视图组件吗?

确实,在webflow中你只能自动绑定&对其中一个变量作用域中的单个对象进行验证,因此我建议您创建一个bean来保存这三个组件,例如

public class Holder implements Serializable {

      private HostDetails;
      private IpDetails;
      private BackupDetails;

      //getters & setters
}

然后,您的流中的'model'属性将引用此Holder类的实例。

您只需记住,如果您想将提交的字段绑定到例如HostDetails,您的输入应使用点表示法来引用该字段(包括'holder'):

<input type="text" name="holder.hostDetails.hostName"/>

然后,为了在视图层中重用组件,请创建一个包含其他组件的JSP。我喜欢为此目的创建.tag文件,一个标签文件负责渲染每个组件。

<%!-- This is the main JSP --%>

<%!-- Include modules using tag files --%>
<content:hostDetails details="${holder.hostDetails}" nestedPath="holder.hostDetails"/>
<content:ipDetails details="${holder.ipDetails}" nestedPath="holder.ipDetails"/>
<content:backupDetails details="${holder.backupDetails}" nestedPath="holder.backupDetails "/>

我将'nestedPath'属性放在那里,以便标记文件是模块化的,即使包含在不同的页面中也可以重复使用(即使没有Holder.class)。可能有一种更优雅的方式来做这一点...

我这里没有显示标记文件的实现,但请看这里:http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPTags5.html