### 输入组件

产生数据，并转到 FlowContext：


| 组件          | 描述         | 备注          | 
| -------- | -------- | -------- | 
| VarInput           | 变量输入组件         | 由 meta 配置输入     |
| VarCopy           | 变量复制组件         | 根据 meta 配置，复制上下文里的变量     | 
| ConsoleInput     | 控制台输入组件     | 通过控制台的输入一行产生     | 
| WebInput          | Web 输入组件       | 由网络请求输入（可以有附件）     | 


### 1、VarInput 组件属性


VarInput 组件，会把节点里的所有 meta 配置，转为流上下文变量。

比如配置 `message`，下个节点，可通过此变量名获取输入值。

示例：

```yaml
- task: @VarInput
  meta:
    message: hello
    var2: test
```

效果相当于：

```yaml
- task: |
    context.put("messsage", "hello");
    context.put("var2", "test");
```


### 2、VarCopy 组件属性（v3.3.3 后支持）


VarCopy 组件，会根据节点里的 meta 配置，从流上下文复制变量。

比如把 message 变量，复制为 var2

示例：

```yaml
- task: @VarCopy
  meta:
    var2: message #支持 SnEL 求值表达式
    user_name: user.name
```

效果相当于：

```yaml
- task: |
    context.put("var2", SnEL.eval("message", context.model()));
    context.put("user_name", SnEL.eval("user.name", context.model()));
```

### 3、ConsoleInput 组件属性

ConsoleInput 组件，会从控制台里读取一行数据，做为输出

| 属性          | 默认值 | 描述 |
| -------- | -------- | -------- |
|   `output`   |    `message`   |   输出变量名（下个节点，可通过此变量名获取输入值）    |

示例：

```yaml
- task: @ConsoleInput
```

效果相当于：

```yaml
- task: |
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    context.put("messsage", reader.readLine());
```


### 4、WebInput 组件属性


WebInput 组件，会从 web 请求里获取参数，然后转为流上下文变量。

| 属性               | 默认值 | 描述 |
| ----------- | -------- | -------- |
| `input`           |    `message`   |   输入变量名（通过变量名，从 web 请求里获取参数）    |
| `attachment`  |    `attachment`     | 附件变量名（通过变量名，从 web 获取文件，并转到流上下文）    |
| `output`         |    `message`   |   输出变量名（下个节点，可通过此变量名获取输入值）    |



示例：

```yaml
- task: @WebInput
```

效果相当于：

```yaml
- task: |
    import org.noear.solon.core.handle.Context;
    
    context.put("messsage", Context.current().param("message"));
    context.put("attachment", Context.current().file("attachment"));
```