首页 > 解决方案 > 如何访问百里香模板中的java对象方法返回值

问题描述

试图在 thymeleaf 模板中获取方法的返回值,但遇到了问题。以下是环境

控制器类:

@Component
@Controller
public class HighController {
    
    
    @GetMapping("/abcdata")
    public String customerForm(Model model) throws IOException, InterruptedException {
        
         
        model.addAttribute("abcdata", new CostDataModel());     
        
        return "abcdata";
    }

}

getter 和 setter

import java.util.List;
import org.springframework.stereotype.Component;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Setter
@Getter
@NoArgsConstructor
@Component
public class CostDataModel {
    
    public SubList abcdata;
    
}

主班

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;

@ComponentScan
@SpringBootApplication
public class AbcmanagementApplication {

    public static void main(String[] args) {
        SpringApplication.run(CostmanagementApplication.class, args);
    }

}

thymeleaf 模板视图(abcdata.html)

<div class="starter-template">
      
         <form action="#" th:action="@{/abcdata}" th:object="${abcdata}" method="post">

                <div class="form-group">
                    <label for="subs">Choose subs</label>
                    <select class="form-control selectpicker" th:field="*{abcdata}" id="abcdata">
                        <option value="">Nothing selected</option>
                        <option th:each="abcdata : ${abcdata}"
                                th:value="${abcdata.abcdata}"
                                th:text="${abcdata}">abcdata
                        </option>

                    </select>
                </div>
             
         <button class="btn btn-primary" type="submit">Submit form</button>
    </form>
    </div>

子列表类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Component
public class SubList {
    
    @Autowired
    private RequestToken rt;
    
    public List<String> getSub() throws IOException, InterruptedException
    {
       // some code here
    return list;
        
    }

}
    

我需要访问getSub()thymeleaf 模板中的方法返回的整个列表。但它不是列表,而是返回整个对象。在 thymeleaf 中,我使用下拉字段来填充整个列表,但存在一些问题。

标签: javaspring-bootthymeleaf

解决方案


  1. 首先@Component从您放入模型中的对象中移除(soCostDataModelSubList)。这个注解意味着你希望 Spring 容器创建单个实例,但这不是你想要的。
  2. @Component从中删除HighController。您已经拥有@Controller足以让 Spring 将类作为具有组件扫描的单例来拾取。
  3. RequestToken里面有什么用SubList?由于SubList不再是 Spring 单例,因此自动装配将不起作用。如果您真的需要它,可以通过构造函数手动传递它。
  4. 使用th:object="${abcdata}",您选择CostDataModelThymeleaf 中的实例。当您th:field="*{abcdata}"在 中执行时<select>,这意味着 Thymeleaf 将调用getAbcData()selected 上的方法,该方法CostDataModel返回SubList实例。这不是你想要的,你应该使用简单String的字段。很难猜测您的问题的确切解决方案是什么,也许您可​​以使用一些比其他abcdata地方更好的名称来更好地理解您的问题。无论如何,您可能想在我的博客上阅读有关在 Thymeleaf 中使用 HTML 选择选项的信息,以了解有关此内容的更多信息,然后如果仍然无法正常工作,则可能会更新您的问题。

推荐阅读