2013-04-23 3 views
0

저는 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 메소드를 호출하지 않았기 때문에 가능했을 지 모르지만, 그것은 아무것도 변경하지 않았습니다.

답변

0

나는 그것이 무엇인지 알게되었습니다. 각 요소를 제거하고 입력 텍스트 상자에 있음을 알았습니다. 나는 그것의 유효성 검사기를 제거하고 여전히 작동하지 않았다. 그런 다음 엔티티 유효성 검사 (IE, null 또는 공백 일 수 없음)를 사용하고 있음을 확인합니다. 상자에 텍스트가 있으면 메소드가 오류없이 실행됩니다.

+0

commandButton의 속성 'process = "@ this"'를 사용하려고 했습니까? –

관련 문제