저는 primefaces 3.5, Glassfish 3.1.2 및 Java EE를 사용하고 있습니다. 테이블에 "질문"을 만드는 페이지를 만들려고합니다. 사용자가 질문에 대답하려고 할 때 선택할 수있는 "대답"이 포함 된 데이터 테이블이 있습니다.내 명령 단추가 작동하지 않는 이유는 무엇입니까?
객관식 퀴즈 퀴즈이기 때문에 올바른 답변을 하나 이상 갖고 있어야하며 나머지는 옳은 질문을해야합니다. 저는 질문 당 2-6 개의 답변을 허용하고, 4 개의 답을 최대한 가질 수 있도록 허용하고 있습니다. 그래서 나는 p : dataTable 엘리먼트를 가지고 있고, 3 개의 commandButtons를 추가, 제거, 또는 테이블의 응답을 편집한다. 각각은 클릭 할 때마다 실행되는 서버 측 메서드를 가지고있다. 그러나 메소드가 실행되지 않습니다. 오류도 예외도 없으며 아무것도 작동하지 않습니다.
public void addAnswer() {
System.out.println("***** CALLED ADD ANSWER");
answers.add(new QuestionAnswers());
answers.get(answers.size() - 1).setCorrect(false);
setIDs();
//set the data models
datamodel = new QuestionAnswersDataModel(new ArrayList<QuestionAnswers>(answers));
}
public void removeSelect() {
System.out.println("***** CALLED REMOVE SELECT");
if (selectedAnswer == null && !answers.contains(selectedAnswer)) {
FacesUtils.addErrorMessage(NO_SELECTION_ERROR);
} else {
answers.remove(selectedAnswer);
}
setIDs();
//set the data models
datamodel = new QuestionAnswersDataModel(new ArrayList<QuestionAnswers>(answers));
}
public void setAsCorrect() {
System.out.println("***** CALLED SET AS CORRECT");
if (selectedAnswer != null) {
selectedAnswer.setCorrect(true);
if (!entry.getMultichoice()) {
for (QuestionAnswers questionAnswers : answers) {
if (questionAnswers != selectedAnswer) {
questionAnswers.setCorrect(false);
}
}
}
} else {
FacesUtils.addErrorMessage(NO_SELECTION_ERROR);
}
setIDs();
//set the data models
datamodel = new QuestionAnswersDataModel(new ArrayList<QuestionAnswers>(answers));
}
I : 여기
<h:form id="createQForm">
<h1>Create A Question</h1>
<p:messages id="msgs"/>
<p:selectOneMenu
value="#{createQuestionBean.selectedCategory}"
id="lstCategory" required="true" >
<f:selectItems
value="#{createQuestionBean.categories}" />
<p:ajax listener="#{createQuestionBean.onSelectCategory}"
update="lstSubCategory" />
</p:selectOneMenu>
<p:selectOneMenu
value="#{createQuestionBean.selectedSubCategory}"
id="lstSubCategory" required="false">
<f:selectItem itemLabel="No Sub-Category"
noSelectionOption="true" />
<f:selectItems
value="#{createQuestionBean.subCategories}"/>
</p:selectOneMenu>
<h:panelGrid columns="3">
<h:outputLabel for="txtQuestion" id="lblQuestion" value="Question: *" />
<p:inputText value="#{createQuestionBean.entry.question}"
id="txtQuestion" required="true"
requiredMessage="You must provide a question"
validatorMessage="#{createQuestionBean.QUESTION_VALIDATION_MESSAGE}">
<f:validateRegex pattern=".*[\s\d\w]" />
<p:ajax update="msgQuestion" event="keyup" />
</p:inputText>
<p:message for="txtQuestion" id="msgQuestion" display="icon"/>
</h:panelGrid>
<h:outputText value="Horizontal: " />
<p:selectManyCheckbox value="#{createQuestionBean.selectedOptions}">
<f:selectItem itemLabel="Randomizable?" itemValue="randomizable" />
<f:selectItem itemLabel="Multiple Choice?" itemValue="multichoice" />
</p:selectManyCheckbox>
<p:fileUpload
value="#{createQuestionBean.questionImage}" mode="simple"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
label="Select Images (jpg or png)"
sizeLimit="2097152"
invalidFileMessage="Sorry, only files of type .jpg, .png or .gif are allowed"
invalidSizeMessage="Sorry, files are limited in size to 2 Mb"/>
<p:dataTable
id="answersTable" var="answer" style="width: 250px"
value="#{createQuestionBean.datamodel}"
selection="#{createQuestionBean.selectedAnswer}"
editMode="cell" editable="true"
selectionMode="single">
<p:column style="width:75%">
<p:cellEditor >
<f:facet name="output">
<h:outputText
value="#{answer.answer.testAnswer}" />
</f:facet>
<f:facet name="input">
<p:inputText
id="modelInput"
style="width: 97%;height: 97%"
value="#{answer.answer.testAnswer}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:25%">
#{answer.correct ? "Correct" : "Wrong" }
</p:column>
</p:dataTable>
<h:panelGrid columns="3">
<p:commandButton
update="answersTable" ajax="true"
actionListener="#{createQuestionBean.removeSelect}"
value="Remove Selected -"/>
<p:commandButton
update="answersTable" ajax="true"
actionListener="#{createQuestionBean.setAsCorrect}"
value="Set Selected As Right"/>
<p:commandButton
update="answersTable" ajax="true"
value="Add +"
actionListener="#{createQuestionBean.addAnswer}"/>
</h:panelGrid>
<p:commandButton
action="#{createQuestionBean.saveAndStoreEntry()}" />
</h:form>
호출하는 방법이 있습니다 : 여기
은 (내가 다른 곳에서 오류가 단지의 경우 전체 페이지를 포함하고있어) 내 페이지입니다 각 메소드에서 중단 점을 추가하여 System ouputs와 함께 호출되는지 확인합니다.
내가 뭘 잘못하고 있니? 비록 그것이 AjaxBehaviourEvent 메소드를 호출하지 않았기 때문에 가능했을 지 모르지만, 그것은 아무것도 변경하지 않았습니다.
commandButton의 속성 'process = "@ this"'를 사용하려고 했습니까? –