组件间数据传输
组件数据传输原理
- 要发送参数的组件定义数据输出槽
backoffice不同页面之间的数据传输是通过definition.xml文件中定义的sockets进行传输。input为参数输入,output为参数输出。例如下面的通用搜索组件定义:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<widget-definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.hybris.com/schema/cockpitng/widget-definition.xsd"
id="com.hep.backoffice.widgets.base.lov">
<name>搜索</name>
<description>搜索</description>
<defaultTitle>搜索</defaultTitle>
<author>zhoubin</author>
<version>1.0</version>
<view src="lov.zul" />
<sockets>
<output type="java.lang.Object" id="selectResult"/>
</sockets>
<keywords>
<keyword>Hepbackofice</keyword>
</keywords>
<controller class="com.hep.backoffice.widgets.widget.base.HepLovController" />
</widget-definition>
]其中selectResult为输出socket,即要把参数发送到具体的槽点:
com.hybris.cockpitng.util.DefaultWidgetController.sendOutput(String id, Object data)
其中id即为definition.xml中定义的输出槽selectResult,即把数据输出到指定的槽点。
- 接收参数的组件定义数据接收槽
同样在接收参数的目标组件中要定义对应的input sockets用于接收参数:
<sockets>
<input type="java.lang.Object" id="param"/>
</sockets>
接受参数的目标组件接收参数主要通过定义@SocketEvent(socketId = “输入槽点”)注解在方法上进行参数的接收,方法参数即为要接收的参数。
示例:
@SocketEvent(socketId = "param")
public void getParam(final Object param){
//业务代码
}
- 连接输出组件与输入组件,并指定输出槽与输入槽
最后还需要在{extname}-backoffice-widgets.xml中定义widget-connection将输出参数的组件和接收参数的组件,输出槽和接收槽连接起来即可:
格式: <widget-connection sourceWidgetId="发送参数的组件" targetWidgetId="接收参数的组件Id" inputId="接受参数组件的接受数据的槽点" outputId="发送参数的组件中参数发送的槽点"/>
示例: <widget-connection sourceWidgetId="hepLov" targetWidgetId="hepEcCheck" inputId="paymentReturn" outputId="selectResult"/>
- 完成