2

私は自分のフローの1つでこれをやろうとしています:

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

冗長です、私は知っています。デバッグ目的のためだけです

ここでの問題は、プロファイルが null (com.myapp.model.Profile) であり、必要な属性エラーが原因でフロー ハンドラーに例外がスローされることです。ただし、profileId (long) は null ではなく、正常に動作します。

私の質問:

型がただのロング型じゃなかった可能性はありますか?(ここに別の関連トピックがあります)

これが私のコントローラーです:

@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";
}

編集:

私はそれを解決しました。オブジェクト Profile (「プロファイル」という名前) の 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 に答える