我有一个奇怪的错误让我发疯。 我有一个带有两个不同Get方法的Controller - 用于两个不同的url映射。 URL1工作得非常好,有了URL2,我得到了
[THYMELEAF] [http-nio-8080-exec-3]异常处理模板 “questionnaireForm”:执行处理器时出错 'org.thymeleaf.standard.processor.attr.StandardEachAttrProcessor' (questionnaireForm:10) 引起的 java.lang.NullPointerException:null org.thymeleaf.context.WebSessionVariablesMap.hashCode(WebSessionVariablesMap.java:276)~ [thymeleaf-2.1.4.RELEASE.jar:2.1.4.RELEASE]
在检查每一行后几小时,很明显我的Controller Get Method在调用视图之前向Model.addAttribute添加了一个非null对象。 我还从模板中删除了所有代码,并添加了以下内容进行故障排除:
<tr th:each="var : ${#vars}">
<td th:text="${var.key}"></td>
<td th:text="${var.value}"></td>
这也返回相同的空错误! 我唯一可以在网上找到的是Thymeleaf 2.1.4的一个错误,它是由于没有HttpSession对象引起的 https://github.com/thymeleaf/thymeleaf/issues/349
但是又一次,我的URL1工作正常! 我没有在这里发布任何代码,因为我不确定还有什么要发布,请问!
编辑:添加了控制器代码。 /admin/questions
是工作正常的网址,'/ admin / questionnaires'是不起作用的网址。
@Controller
public class AdminController {
private QuestionRepository questionRepository;
private EQuestionnaireRepository eQuestionnaireRepository;
private EQuestionnaire eQuestionnaire;
@Autowired
public AdminController(QuestionRepository questionRepository,
EQuestionnaireRepository
eQuestionnaireRepository){
this.questionRepository = questionRepository;
this.eQuestionnaireRepository = eQuestionnaireRepository;
eQuestionnaire = eQuestionnaireRepository.findAll().get(0);
}
@RequestMapping(value = "/admin/questions", method=RequestMethod.GET)
public String questionForm(Model model) {
model.addAttribute("question", new Question());
return "questionForm";
}//-->This Works fine
@RequestMapping(value = "/admin/questions", method=RequestMethod.POST)
public String saveQuestion(@ModelAttribute Question newQuestion, BindingResult bindingResult, Model model) {
if( bindingResult.hasErrors())
{
System.out.println(bindingResult);
System.out.println("BINDING RESULTS ERROR");
return "questionForm";
}
questionRepository.save(newQuestion);
return "questionForm";
}
@RequestMapping(value = "/admin/Questionnaires", method=RequestMethod.GET)
public String QuestionnaireForm(Model model){
model.addAttribute("ListofQ",eQuestionnaire.getQuestionList());
return "questionnaireForm";
更新:我改为百里香器2.1.5-SNAPSHOT,现在我没有得到前面提到的错误 - 但是出现了另一个错误:
There was an unexpected error (type=Internal Server Error, status=500).
Exception evaluating SpringEL expression: "ask.questionText"
(questionnaireForm:13)
现在,模板中的对象引用为null。当我把它放入模型时,它不是null(我在GET方法中得到了getQuestionText方法的System.out,所以这已经确认了) 这是我在模板中尝试的简单代码:
<table>
<tr th:each= "ask : ${ListofQ}"></tr>
<tr th:text= "${ask.questionText}"></tr>
</table>
这是问题对象:
@Entity
@Table(name = "Questions")
public class Question {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long ID;
private int sequence;
private String questionText;
private int weightage;
private String option1 = "option1";
private String option2 = "option2";
private String option3 = "option3";
public Question() {
}
public Long getID() {
return ID;
}
public void setID(Long iD) {
ID = iD;
}
public int getSequence() {
return sequence;
}
public void setSequence(int sequence) {
if (sequence > 0) this.sequence = sequence;
}
public String getQuestionText() {
return questionText;
}
public void setQuestionText(String questionText) {
this.questionText = questionText;
}
public int getWeightage() {
return weightage;
}
public void setWeightage(int weightage) {
this.weightage = weightage;
}
public void setOption1(String option1) {
this.option1 = option1;
}
public void setOption2(String option2) {
this.option2 = option2;
}
public void setOption3(String option3) {
this.option3 = option3;
}
public String getOption1() {
return option1;
}
public String getOption2() {
return option2;
}
public String getOption3() {
return option3;
}
答案 0 :(得分:0)
您没有将模型对象返回给Thymeleaf。
尝试这样的事情:
@RequestMapping(value = "/admin/Questionnaires", method=RequestMethod.GET)
public ModelAndView QuestionnaireForm(Model model){
return return new ModelAndView("questionnaireForm", "ListofQ",eQuestionnaire.getQuestionList());
}
答案 1 :(得分:0)
“each”中的输出需要在同一个语句中,我认为这对你有用
<table>
<tr th:each= "ask : ${ListofQ}" th:text= "${ask.questionText}"></tr>
</table>