2

我正在尝试在我的一个流程上执行此操作:

<!-- Initial inputs -->
<input name="profileId" required="true" type="long" />
<input name="profile" required="true" type="com.myapp.model.Profile" />

冗余,我知道。仅用于调试目的

这里的问题是配置文件为空(com.myapp.model.Profile),由于所需的属性错误,向我的流处理程序抛出异常。但是,profileId (long) 不为空并且工作正常。

我的问题:

有没有可能该类型不能只是一个长类型?(这里是另一个相关的话题)

这是我的控制器:

@RequestMapping(value = "/mappingUrl", method = {RequestMethod.POST})
public String go2Flow(.... some parameters ...,
@ModelAttribute("profile") Profile profile,
ModelMap model) {

model.put("profile", profile);
model.put("profileId", profile.getId());

return "redirect:/app/myFlow";
}

编辑:

我解决了。由于我在我的 Spring MVC 控制器上为对象配置文件(名为“配置文件”)使用@SessionAttributes,所以在我的流程中,我只使用 ExternalContext API 来检索该对象。

因此,控制器保持相同的代码,但在我的流程中,可以像这样使用 ExternalContext API:

<on-start>
    <evaluate expression="someService.serviceMethod(externalContext)" result="flowScope.outputVariable" />
</on-start>

然后在服务方法上:

@Override
public SomeObject serviceMethod(ExternalContext externalContext) {

     Profile profile = (Profile) externalContext.getSessionMap().get("profile");

      .....
     (method logic)
      .....
}
4

1 回答 1

0

这是你可以做的:

只保留 profileId 并使其不需要

然后开始你的流动

<decision-state id="isProfileIdSet">
    <if test="profileId != null" then="setProfile" else="errorState" />
</decision-state>

<action-state id="setProfile">/*get Profile with id and store it in flowScope */</action-state>

<end-state id="errorState"></end-state>

并添加一个<on-start>状态或<on-entry>在您的第一个状态内

于 2013-10-29T15:32:13.153 回答