我使用 spring mvc 和 mysql 来制作测验 Web 应用程序,但我一直在尝试为管理员制作表单,以便在创建测验时正确添加答案。
在我的表单中,我有四个可能的答案,我可以将所有内容插入mysql,但我总是在文本列中将所有四个答案放在一起,我想将它们分开。
例如在mysql表中:
id |文字|正确 |问题ID
1 |ans1,ans2,ans3,ans4|真实 | 1
我每行只需要 1 个答案。
我的jsp和 Controller 代码:
<s:url var="url_create_answer" value="/admin/createAnswer"/>
<f:form action="${url_create_answer}" commandName="command">
<table border="1">
<c:forEach var="i" begin="1" end="4">
<tr>
<td>Answer${i}</td>
<td><f:textarea rows="5" cols="100" path="answer.text" placeholder="text answer ${i}"/></td>
</tr>
<tr>
<td>Is Correct?</td>
<td><f:radiobutton path="answer.correct" value="${i}" /></td>
</tr>
</c:forEach>
<tr>
<td colspan="2" align="right"><button>Create</button>
</td>
</tr>
</table>
</td>
</tr>
</f:form>
@Controller
public class CreateAnswerController {
@Autowired
AnswerService answerService;
@RequestMapping(value = "admin/addAnswer", method = RequestMethod.GET)
public String createQuestionForm(Model m) {
AnswerCommand cmd = new AnswerCommand();
m.addAttribute("command", cmd);
return "addAnswer"; // JSP view
}
@RequestMapping(value = "admin/createAnswer", method = RequestMethod.POST)
public String handleCreateAnswer(@ModelAttribute("command") AnswerCommand cmd,BindingResult result, Model m,HttpSession session) {
for(int i = 1; i <= 4; i++){
try {
Integer questionId = (Integer)(session.getAttribute("questionId"));
cmd.getAnswer().setQuestion_id(questionId);
if(!cmd.getAnswer().getText().equals(""))
if(cmd.getAnswer().getCorrect() == i){
cmd.getAnswer().setCorrect(1);
int answerId = answerService.createAnswer(cmd.getAnswer());
}else{
cmd.getAnswer().setCorrect(0);
int answerId = answerService.createAnswer(cmd.getAnswer());
}
} catch (Exception ex) {
ex.printStackTrace();
m.addAttribute("err", "Could not add question to quiz");
return "addAnswer";
}
}
return "redirect:addQuestion"; //JSP view
}
}
最佳答案
您可以使用一些独特的分隔符(例如@$%)来存储答案!当您从数据库中检索它时,您可以将其拆分并选择合适的答案并使用它。
关于java - 如何以 Spring 形式计算带有变量的文本区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51884921/