quick-javasprigmvc应用程序

wf82jlnq  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(147)

我希望这个测验是由管理员创建的形式,我尝试了很多方法,但它没有工作

@Entity
@Table(name = "questionsS")
public class Question extends BaseEntity{

    private String text;
    @Column(name = "q_order")
    private Integer order;

    @OneToMany(mappedBy = "question", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Answer> answers=new ArrayList<>();

    @OneToOne
    private Answer chosenAnswer;

    @ManyToOne
    private Questionnaire questionnaire;

    public Question() {
    }

    public Question(String text) {
        this.text = text;
    }

@Entity
@Table(name= "questionnaires")
public class Questionnaire extends BaseEntity {

    @OneToOne
    private User user;

    @Size(min = 2, max = 100, message = "The name must be between 2 and 100 messages.")
    @NotNull(message = "Please provide a name")
    private String name;

    @NotNull(message = "Please, provide a description")
    private String description;

    @OneToMany(mappedBy = "questionnaire", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Question> questions;

    private Boolean isPublished = false;

    public Questionnaire() {
    }

@Service
@Transactional
public class QuestionnaireServiceImpl implements QuestionnaireService {
    private QuestionnaireRepository questionnaireRepository;
    private QuestionService questionService;

    @Autowired
    public QuestionnaireServiceImpl(QuestionnaireRepository questionnaireRepository, QuestionService questionService) {
        this.questionnaireRepository = questionnaireRepository;
        this.questionService = questionService;
    }

    @Override
    public Questionnaire save(Questionnaire questionnaire, User user) {
        questionnaire.setUser(user);

        return questionnaireRepository.save(questionnaire);
    }

    @Override
    public Page<Questionnaire> findAll(Pageable pageable) {
        return questionnaireRepository.findAll(pageable);
    }

    @Override
    public Questionnaire find(Long id) throws ResourceUnavailableException {

        return questionnaireRepository.findById(id).orElseThrow(() ->
                new ResourceUnavailableException(String.format("Questionnaire with id %s isn't find",id)));
    }

    @Override
    public List<Questionnaire> getQuestionnaires() {
        return questionnaireRepository.findAll();
    }

    @Override
    public Questionnaire update(Questionnaire questionnaire) throws ResourceUnavailableException, UnauthorizedActionException {
        Questionnaire oldQuestionnaire=find(questionnaire.getId());

        oldQuestionnaire.setName(questionnaire.getName());
        oldQuestionnaire.setDescription(questionnaire.getDescription());
        return null;
    }

    @Override
    public void delete(Questionnaire questionnaire) throws ResourceUnavailableException, UnauthorizedActionException {
        this.questionnaireRepository.delete(questionnaire);
    }

    @Override
    public Page<Questionnaire> search(String query, Pageable pageable) {
        return this.questionnaireRepository.searchByName(query,pageable);
    }

    @Override
    public void save(Questionnaire questionnaire) {
        this.questionnaireRepository.saveAndFlush(questionnaire);
    }

@Controller
@RequestMapping("/questionnaires")
@Slf4j
public class QuestionnaireController {
    private QuestionnaireService  questionnaireService;
    private QuestionService questionService;

    @Autowired
    public QuestionnaireController(QuestionnaireService questionnaireService, QuestionService questionService) {
        this.questionnaireService = questionnaireService;
        this.questionService = questionService;
    }

    @GetMapping
    public String getQuestionnaires(Model model){

        model.addAttribute("questionnaires",questionnaireService.getQuestionnaires());
        model.addAttribute("questions", questionService.getQuestions());
        return "questionnaires";
    }
    @GetMapping("/add")
    public String getQuestionnaireForm(Model model) {

            model.addAttribute("questionnaire", new Questionnaire());
        model.addAttribute("questions", questionService.getQuestions());

        return "questionnaire-add";
    }

    @PostMapping("/add")
    public String createNewQuestionnaire(@Valid @ModelAttribute("questionnaire") Questionnaire questionnaire,
                                         BindingResult result) {
        if(result.hasErrors()) {
            log.error("Error creating Questionnaire: {}", result.getAllErrors());
            return "questionnaire-add";
        }
        try {

            questionnaireService.save(questionnaire);
        } catch(Exception ex) {
            log.error("Error creating Questionnaire", ex);
            return "questionnaire-add";
        }

        return "redirect:/questionnaires";
    }
}

但不识别questionly-add.html中的question.answers

<div th:each="question, itemStat : *{questions}" th:label="question">
        <input th:field="*{questions[__${itemStat.index}__].text}"/>
          <tr th:each="answer, itemStat : *{question.answers}" th:label="answer">
                 <input th:field="*{answer[__${itemStat.index}__].text}"/>-->

                     <p th:if="${#fields.hasErrors('questions')}" th:errors="*{questions}"
                     class="errors alert alert-danger">-->answer is required

     <div/>

我不知道我错在哪里,我试过,但我从来没有设法通过浏览器创建测验。如果有人知道我该如何填写问卷10个问题,因为每个问题有3个答案。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题