簡體   English   中英

如何在 thymeleaf 模板中訪問 java object 方法返回值

[英]How to access java object methods returned value in thymeleaf template

試圖在 thymeleaf 模板中獲取方法的返回值,但遇到了問題。 以下是環境

Controller class:

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

主Class

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>

子列表 class

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

}
    

我需要訪問 thymeleaf 模板中的getSub()方法返回的整個列表。 但它不是列表,而是返回整個 object。 在 thymeleaf 中,我使用下拉字段來填充整個列表,但存在一些問題。

  1. 首先從您放入 Model 的對象中刪除@Component (因此CostDataModelSubList )。 這個注解意味着你希望 Spring 容器創建單個實例,但這不是你想要的。
  2. HighController中刪除@Component 您已經擁有@Controller ,足以讓 Spring 將 class 作為 singleton 進行組件掃描。
  3. SubList中的RequestToken有什么用? 由於SubList不再是 Spring singleton,因此自動裝配將不起作用。 如果您真的需要它,可以通過構造函數手動傳遞它。
  4. 使用th:object="${abcdata}" ,您 select 中的CostDataModel實例在 Thymeleaf 中。 當您在<select>中執行th:field="*{abcdata}"時,這意味着 Thymeleaf 將調用所選CostDataModel上的getAbcData()方法,該方法返回SubList實例。 這不是您想要的,您應該使用簡單的String字段。 很難猜測您的問題的確切解決方案是什么,也許您可以在任何地方使用比abcdata更好的名稱來更好地理解您的問題。 無論如何,您可能想在我的博客上閱讀有關使用 HTML select 選項和 Thymeleaf的信息,以了解有關此的更多信息,然后如果事情仍然無法正常工作,可能會更新您的問題。

這就是我解決它的方法。 與其創建CostDataModel ()的新實例並作為 model 屬性傳遞,不如將getSub()的整個方法代碼復制到 controller class 中。 見下文

@Controller
public class HighController {
    
    
    @GetMapping("/abcdata")
    public String customerForm(Model model) throws IOException, InterruptedException {
        // all the code of getSub() method 

        
         
        model.addAttribute("abcdata", abcdata);     
        
        return "abcdata";
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM