当前位置: 首页 > 知识库问答 >
问题:

post请求时映射布尔值不起作用-thymeleaf spring

姚建树
2023-03-14

我目前正在用Spring jpa和thymeleaf构建一个Web服务。

我的模特问题。类“与我的模型有一种单一的关系”的答案。班级':

@OneToMany(targetEntity = Answer.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "questionAnswerId") 
private List<Answer> answers;

还有我的答案。课堂上的“多人关系”问题。班级':

@ManyToOne(targetEntity = Question.class, fetch = FetchType.LAZY)
@JoinColumn(name="question_answer_id") 
private Question questionAnswerId;

我的控制器方法来更新实体问题:

java prettyprint-override">@PostMapping(value = "/frageDetail/updateQuestion/{id}")
public String updateQuestion(@PathVariable(name = "id") int id, 
                             @ModelAttribute(value="question") Question questionDetails) {      
        
        Question temp = questionRepository.findById(id);
        temp.setQuestionName(questionDetails.getQuestionName());
        temp.setQuestionDescription(questionDetails.getQuestionDescription());
        temp.setQuestionImage(questionDetails.getQuestionImage());
        temp.setQuestionKo(questionDetails.isQuestionKo());
        temp.setQuestionTimelimit(questionDetails.getQuestionTimelimit());
        //temp.setAnswers(questionDetails.getAnswers());
        
        questionRepository.save(temp);
        return "redirect:/fragenAdministration";
}

我的观点是:

<form action="#" th:action="@{/frageDetail/updateQuestion/{id}(id=${question.id})}" th:object="${question}" th:method="post">

<div class="input"> 
    <input type="text" placeholder="Fragename" class="form-control" style="margin-bottom: 20px" th:field="*{questionName}"> 
</div>
        
<div style="margin-bottom: 20px">
    <textarea style="resize: none;" class="form-control" placeholder="Frage Beschreibung" rows="6" th:field="*{questionDescription}"> </textarea>
</div>

<div class="form-group" style="margin-top:45px;">
        
    <div class="checkbox" th:each="answer : ${answerList}">
        <!-- works, but wont update to database -->
        <input type="checkbox" th:checked="${answer.answerOk}" th:text="${answer.answerName}">      
        
        <!-- error, Invalid property 'answer' of bean class [com.example.demo.model.Question]: 
        Bean property 'answer' is not readable or has an invalid getter method: Does the return 
        type of the getter match the parameter type of the setter? -->
        <input type="checkbox" th:field="*{answer.answerOk}" th:text="${answer.answerName}">        
    </div>      
        
<div class="checkbox">
    <label><input type="checkbox" th:field="*{questionKo}">KO Frage</label>
</div>
        
<div class="form-group">
    <label for="timeLimit" class="col-sm-2 control-label" style="text-align: left;">ZeitLimit</label>
    <div class="col-sm-10">
          <input type="time" class="form-control" id="kflgreen" th:field="*{questionTimelimit}">
    </div>
</div>

<div class="form-group">
    <div class="col-sm-12">
        <button class="btn btn-success btn-block">Save</button>
    </div>
</div>
</div>
</form>

除了布尔值“answerOk”的映射之外,一切都正常,这是“Answer”中的一个字段。“班级”。使用th:checked=“${answer.answerOk}”,如果answerOk为true,则选中复选框;这是我们想要的。但要在我取消选中复选框时更新数据库中的值,我必须使用th:field(比如th:field=“*{questionKo}”;这对这个字段和所有其他字段都非常有效)

问题是,当我使用th: field="*{answer.answerOk}"而不是th: check="${anwser.answerOk}"时,我会得到错误消息:

“org.springframework.beans.NotReadablePropertyException:bean类[com.example.demo.model.Question]的无效属性'answer':bean属性'answer'不可读或具有无效的getter方法:getter的返回类型与setter的参数类型匹配吗?”

我当然有所有的盖特和塞特的答案。课堂和问题。班

那么,有没有人知道如何绑定字段answerOk,这样当我选中/取消选中它时,它也会在数据库中得到更新?

谢谢!

共有1个答案

白志勇
2023-03-14

您必须将选择变量表达式(*{...})与th:对象=${...}结合使用。

在您的情况下,*{答案好的}解析为${answer.answer好的}

<div class="checkbox" th:each="answer : ${answerList}">
        <input type="checkbox" th:field="*{answerOk}" th:text="${answer.answerName}">        
</div>  
 类似资料:
  • 问题内容: 我正在尝试向Swift发出发布请求。我的目标是将accesstoken facebook发布到服务器,但不起作用。这是代码: 答案如下: 问题答案: 通过这种方式,您可以使用POST Web服务:

  • 我已经使用SpringBoot和iMA开发了一个简单的web页面,使用类和方法级请求映射注释的组合,但在下面的场景中它不起作用。 我打的时候在工作http://localhost:9999/products我打http://localhost:9999/home/products的时候没有工作 控制器类:包com。实例演示;

  • 我公开了一个使用另一个SOAP服务的服务。我得到了JAXB生成的服务模型。当我使用服务时,数据被设置到与此模型相关的对象中。我定义了自己的域模型,它与JAXB模型具有完全相同的类集,但没有xml注释等。我使用dozer来执行数据映射。当标记为注释(nillable=true)的某些布尔元素为null时,我的域模型中的目标对象布尔对象将设置为默认的true或false值。我希望它保留相同的空值。布尔

  • 在我的spring MVC应用程序中,我试图发出一个简单的Post请求,但由于请求的主体,它不起作用。我在params中得到了嵌套对象,Spring抛出了这个异常: 下面是我的对象DTO: 和: 我拿到了这些日志:

  • 问题内容: 我正在尝试为各个字段使用不同的分析器设置ElasticSearch索引。但是,我似乎找不到一种设置特定于字段的分析器的方法。这是我创建(测试)索引的方法: 如果我正确阅读了文档,则应创建类型为“ tweet”的索引“ twitter”,并且应通过雪球词根分析器分析“ message”字段的内容。为了对此进行测试,我尝试了以下查询: 如果我没记错的话,那应该会受到打击,因为战斗是战斗的源

  • 我已经定义了对象HomeContentDTO和SubscriberUpsertDTO的映射 下面是这两个对象的映射配置 HomeContentDTO中的所有映射值都没有复制到SubscriberUpsertDTO。有人知道原因吗?