【问题标题】:Spring Web Flow - Issue of Reusing SubflowSpring Web Flow - 重用子流的问题
【发布时间】:2015-03-10 02:26:51
【问题描述】:

这可能是一个设计问题,然后是编码问题。

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

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

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

    Host Details
    IP Details
    Backup Details

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

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

我永远不会重复使用整个页面,只需要在不同页面之间重复使用组件。

【问题讨论】:

    标签: spring spring-webflow reusability


    【解决方案1】:

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

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

    public class Holder implements Serializable {
    
          private HostDetails;
          private IpDetails;
          private BackupDetails;
    
          //getters & setters
    }
    

    那么您的流程中的“模型”属性将引用此 Holder 类的一个实例。

    您只需要记住,如果您想将提交的字段绑定到例如HostDetails,您的输入应使用点符号来引用该字段(包括“持有人”):

    <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

    【讨论】:

    • 谢谢,我现在知道该怎么做了。我们使用 Tiles 而不是 jsp 标签来实现可重用位。如果我们继续使用 Tiles,你认为我会碰壁吗?
    • 使用瓦片没问题,你可以将jsp标签和瓦片结合使用。我倾向于使用图块来进行视图组合/布局(页面之间是一致的),并使用标记文件来封装常见内容。标签文件的好处是有一个明确的“合同”,而您必须更深入地挖掘才能找到渲染图块所需的输入。
    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多