1

我有一些适用于 jodd 3.9.1 的代码,我想将其升级到 jodd 版本 4.1.4。但我有一些错误:

例子:

@POST @Action
public String save(){
    ... some code for validation
    if (!valid){
        return VTOR_JSON;     //Error
    }
    service.store(Object);
    return NONE;            //Error

}

例外:

jodd.madvoc.MadvocException: Invalid result name:vtor_json     (or  Invalid result name:none)
    at jodd.madvoc.component.ResultsManager.lookup(ResultsManager.java:181)
    at jodd.madvoc.component.MadvocController.render(MadvocController.java:183)
    at jodd.madvoc.ActionRequest.lambda$createExecutionArray$0(ActionRequest.java:208)
    at jodd.madvoc.ActionRequest.invoke(ActionRequest.java:237)
    at jodd.madvoc.component.MadvocController.invoke(MadvocController.java:154)
    at jodd.madvoc.MadvocServletFilter.doFilter(MadvocServletFilter.java:108)

问题是什么?

如何解决这个问题?

4

2 回答 2

1

igr,谢谢你的回答。

我试试你的建议,这是可行的。

但是,我还有一些额外的代码:

例子:

public Object save(){
    if (!authorized()){
        return   Redirect.to(AuthAction.ALIAS_ACCESS_DENIED);   //don't work
    }
    if (!valid){
        return JsonResult.of(vtor.getViolations());    //work
    }
    ....
    return null;        //work
}

这是调试输出

38675 [DEBUG] j.m.r.AbstractTemplateViewActionResult.render:79 - new target: /accessDenied:
38676 [DEBUG] j.m.r.ServletDispatcherActionResult.targetExists:99 - target check: /accessDenied.jspf
38676 [DEBUG] j.m.r.ServletDispatcherActionResult.targetExists:99 - target check: /accessDenied.jsp
38676 [DEBUG] j.m.r.AbstractTemplateViewActionResult.render:90 - target found: /accessDenied.jsp

但是,永远不要重定向到 accessDenied.html。

我尝试使用 Object 但它不起作用。

有什么建议吗?


我找到了解决方案:

if (!valid){
    return JsonResult.of(VtorUtil.createViolationsJsonString(request, vtor.getViolations())).value();

}

就像你说的那样很容易,igr ;-)

于 2018-03-08T12:06:16.513 回答
0

让我解释:)

使用Jodd v4,我们不再有 VTOR_JSON 类型的结果 - 那些返回字符串的结果。(字符串常量仍然存在,但未使用)。我们不得不删除这种返回结果的方式,因为它不可扩展——根本无法轻松添加不同的结果类型。

如何解决?

我们回到了基本 :) VTOR_JSON 正在返回带有错误的 JSON。所以现在你有几个选择(如你所见):

  • 返回一个带有@RenderWith注解的对象;
  • 在动作上添加@RenderWith 注释;
  • 返回一个PathResult辅助对象;
  • 在操作配置中指定结果。

简而言之,你应该自己做这件事——但不要担心它超级容易。例如,您可以返回:

if (!valid) {
    return JsonResult.of(violations());
}
return null;

如果null不起作用,请尝试返回new NoneActionResult()(对不起,我们将添加更方便的方式)。

查看结果包:results

很抱歉这个过渡,它真的是为了好的目的。我们将添加更多的助手,如JsonResult. 当然,如果您需要任何支持,请告诉我们

于 2018-03-08T08:28:17.997 回答