【问题标题】:IllegalStateException: Neither BindingResult nor plain target object for bean name with thymeleafIllegalStateException:带有百里香叶的 Bean 名称既不是 BindingResult 也不是普通目标对象
【发布时间】:2020-08-27 22:54:05
【问题描述】:

我正在尝试显示带有百里香叶的选择列表。我有一个带有多键的实体类,我试图使用两个键之一作为我的选择列表的值,但是当我运行页面时,我捕获了上述异常。我已经测试过显示一个包含我的实体类的其他值的表(没有多键)并且它可以工作。 打印堆栈:

Caused by: org.attoparser.ParseException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringSelectFieldTagProcessor' (template: "dashboard" - line 62, col 21)
    at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393)
    at org.attoparser.MarkupParser.parse(MarkupParser.java:257)
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230)
    ... 52 more
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringSelectFieldTagProcessor' (template: "dashboard" - line 62, col 21)
    at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:117)
    at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95)
    at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633)
    at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314)
    at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleOpenElementEnd(TemplateHandlerAdapterMarkupHandler.java:304)
    at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:278)
    at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleOpenElementEnd(OutputExpressionInlinePreProcessorHandler.java:186)
    at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:124)
    at org.attoparser.HtmlElement.handleOpenElementEnd(HtmlElement.java:109)
    at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(HtmlMarkupHandler.java:297)
    at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402)
    at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159)
    at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710)
    at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301)
    ... 54 more
Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'OEE' available as request attribute
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:153)
    at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903)
    at org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext.getBindStatus(SpringWebMvcThymeleafRequestContext.java:227)
    at org.thymeleaf.spring5.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:306)
    at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:253)
    at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:227)
    at org.thymeleaf.spring5.processor.AbstractSpringFieldTagProcessor.doProcess(AbstractSpringFieldTagProcessor.java:174)
    at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74)
    ... 67 more

和我的代码:

@Controller
public class HelloController {

    @Autowired
    OEEService oeeService;

    @GetMapping({"/", "/hello"})
    public String hello(Model model, @RequestParam(value="name", required=false, defaultValue="World") String name) {
        model.addAttribute("name", name);
        return "index";
    }

    @GetMapping({"/dashboard"})
    public String dashboard(Model model) {
        List<OEE> oeelist = oeeService.SelDevice().stream().distinct().collect(Collectors.toList());
        model.addAttribute("oeelist", oeelist);
        return "dashboard";
    }
}
@Entity
@Table(name = "MON_OEE")
@Data
@NoArgsConstructor
public class OEE implements Serializable
{

    /**
     * 
     */
    private static final long serialVersionUID = -7738922358421962399L;

    @EmbeddedId
    private OEEid oeeID;

    @Basic(optional = false)
    @Column(name = "MSO_QUANTITA")
    private int amount;

    @Basic(optional = false)
    @Column(name = "MSO_OEE")
    private float oee;
}
@Data
@Embeddable
@NoArgsConstructor
public class OEEid implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 4512114330774744082L;

    @DateTimeFormat(pattern = "dd-MM-yy HH:mm:ss")
    @Column(name = "MSO_GIORNO_LAV")
    private Date date;

    @Column(name = "MSO_MACCHINA")
    private String device;

    public OEEid(Date date, String device) {
        super();
        this.date = date;
        this.device = device;
    }


}

我在 html 页面上遇到错误的地方

 <div class="container">
          <div class="row">
            <div class="col">
              <form role="form">
                <div class="form-group row">
                  <div class="col">
                  <form action="#" th:action="@{/dashboard}"  th:object="${OEE}" method="POST">
                   <div class="container">
                     <select th:field="*{device}" multiple="multiple">
                        <option th:each="o : ${oeelist}" 
                              th:value="${o.oeeID.device}" th:text="${o.oeeID.device}" >Wireframe</option>
                      </select>
                    </div>
                   </form>
                  </div>
                </div>
              </form>
            </div>
            <div class="col"></div>
            <div class="col"></div>
          </div>
        </div>

【问题讨论】:

    标签: spring-boot thymeleaf


    【解决方案1】:

    在 Html 中,您使用的对象 OEE 缺少 ModelAttribute

    <form action="#" th:action="@{/dashboard}"  th:object="${OEE}" method="POST">
    

    在此处将OEE 作为Attribute 添加到Model

    @GetMapping({"/dashboard"})
        public String dashboard(Model model) {
            List<OEE> oeelist = oeeService.SelDevice().stream().distinct().collect(Collectors.toList());
            model.addAttribute("oeelist", oeelist);
            model.addAttribute("OEE", new OEE ());   //change here
            return "dashboard";
        }
    

    【讨论】:

    • 对不起,它不起作用。我已根据您的建议对其进行了更改,但出现异常:“bean 类 [com.test.entities.OEE] 的无效属性 'device':Bean 属性 'device' 不可读或具有无效的 getter 方法:是否getter 的返回类型是否与 setter 的参数类型匹配?"
    • th:field="*{device}"更改为th:field="*{oeeID.device}"
    • 非常感谢...您解决了我的问题。现在我可以显示带有选择列表的 html 页面。但我无法使用引导程序显示选择列表。我不明白为什么页面的某些部分正确使用引导程序,并且选择列表不能正确使用引导程序选择 css。你能帮帮我吗?
    • 我建议您添加另一个附加完整html和css的问题..这将很容易调试
    猜你喜欢
    • 2020-11-16
    • 1970-01-01
    • 2013-05-23
    • 2020-02-21
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多