如何找出可用于模板变量的属性

时间:2018-07-26 21:59:42

标签: java spring thymeleaf

我有以下控制器:

final StorageReference filePath = mImageStore.child("profile_images").child("full_image").child(userId + ".jpg");
                filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        //Bitmap hochladen
                        uploadBitMap(uri.toString());
                    }
                });

在我的模板中,我可以这样做:

public class MyErrorController implements ErrorController {

  @RequestMapping("/error")
  public String handleError(HttpServletRequest request, Model model) {
     model.addAttribute("request", request);

   }
}

它将给我html的内容:

Method: <span th:text="${request.method}">method</span><br/>

是否有一种简单的方法来知道Thymeleaf中Method: POST 方法具有的所有属性?例如,进行类似request的操作(用于演示目的)。 HttpServletRequest方法在此处列出,但是我不确定哪些方法可以用作属性,此外,我不确定如何(希望)从模板轻松显示该方法。

1 个答案:

答案 0 :(得分:1)

对于当前版本的Thymeleaf(3.0.9),没有特定的实用程序方法可以打印出对象的属性。因此,没有简单的方法。

但是,一种方法是构造自己的方法并使用反射打印它们。我的运行假设当然是Java可用的方法也应Thymeleaf可用。如果不是您要的方法(inspiration),则可以修改此方法。

public static List<Method> toDict(Class aClass) {
    List<Method> methods = new ArrayList<>();
    do {
        Collections.addAll(methods, aClass.getDeclaredMethods()); //using just this would return the declared methods for the class and not any parent classes
        aClass = aClass.getSuperclass();
    } while (aClass != null);
    return methods;
}

然后在您的HTML中调用静态方法:

<div th:each="field : ${T(com.somedomain.util.SomeUtil).toDict(#request.class)}">
    <span th:text="${field}" th:remove="tag">[field]</span><br>
</div>

还要注意单元测试和静态方法的常见警告。最后,如果您要访问模型变量,可以查看#vars

不需要控制器方法。