Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringWeb流-重用子流的问题_Spring_Spring Webflow_Reusability - Fatal编程技术网

SpringWeb流-重用子流的问题

SpringWeb流-重用子流的问题,spring,spring-webflow,reusability,Spring,Spring Webflow,Reusability,这可能是一个设计问题,然后是编码问题 我们有一个现有的订购接口,我们正试图将其转换为SpringWebFlow。对于每种产品,我们都有一些可重用的组件,如联系人详细信息、合同详细信息、订单详细信息、定价 现在我们想把它们放在一个页面上,但仍然保持可重用性,以便可以用于不同的产品 例如,我有一个服务详细信息页面,页面上有三个不同的组件,分别称为: Host Details IP Details Backup Details 这些组件中的每一个都需要在其他产品中重用,所以问

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

我们有一个现有的订购接口,我们正试图将其转换为SpringWebFlow。对于每种产品,我们都有一些可重用的组件,如联系人详细信息、合同详细信息、订单详细信息、定价

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

例如,我有一个服务详细信息页面,页面上有三个不同的组件,分别称为:

    Host Details
    IP Details
    Backup Details
这些组件中的每一个都需要在其他产品中重用,所以问题是如何实现这一点

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


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

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

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

public class Holder implements Serializable {

      private HostDetails;
      private IpDetails;
      private BackupDetails;

      //getters & setters
}
然后流中的“model”属性将引用这个Holder类的实例

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


然后,为了重用视图层中的组件,创建一个包含其他组件的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),也是模块化的和可重用的。也许有一个更优雅的方式来做这一点


我没有在这里展示标记文件的实现,但请看这里:

谢谢,我现在有了一些想法。对于可重用的bit,我们使用Tiles而不是jsp标记。如果我们继续使用Tiles,你认为我会撞到墙吗?使用Tiles很好,你可以将jsp标记和Tiles结合使用。我倾向于使用平铺来进行视图合成/布局(页面之间是一致的),并使用标记文件来封装公共内容。标记文件的好处是有一个清晰的“契约”,而您必须深入挖掘才能找到渲染平铺所需的输入。
<%!-- 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 "/>