我希望这个测验是由管理员创建的形式,我尝试了很多方法,但它没有工作
@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个答案。
暂无答案!
目前还没有任何答案,快来回答吧!