[英]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 中,我使用下拉字段來填充整個列表,但存在一些問題。
@Component
(因此CostDataModel
和SubList
)。 這個注解意味着你希望 Spring 容器創建單個實例,但這不是你想要的。HighController
中刪除@Component
。 您已經擁有@Controller
,足以讓 Spring 將 class 作為 singleton 進行組件掃描。SubList
中的RequestToken
有什么用? 由於SubList
不再是 Spring singleton,因此自動裝配將不起作用。 如果您真的需要它,可以通過構造函數手動傳遞它。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.