【问题标题】:ActionResult , exception with new Jodd versionActionResult ,新 Jodd 版本的异常
【发布时间】:2018-03-07 22:23:59
【问题描述】:

我有一些适用于 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)

有什么问题?

如何解决?

【问题讨论】:

    标签: jodd


    【解决方案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 ;-)

    【讨论】:

      【解决方案2】:

      让我解释一下:)

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

      如何解决?

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

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

      简而言之,您应该自己完成此操作 - 但不要担心它非常容易。例如,您可以返回:

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

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

      查看结果包:results

      很抱歉这次过渡,这确实是为了好的目的。我们将添加更多的助手,如JsonResult。当然,如果您需要任何支持,let us know

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-27
        • 1970-01-01
        相关资源
        最近更新 更多