2013-01-17 4 views
5

<p:dialog><p:commandButton>을 조합하여 사용하려고합니다. 내 .xhtml 페이지에는 대화 상자를 표시하는 데 사용되는 picklist 및 commandButton이 있습니다. 대화 상자는 picklist의 목표 값으로 데이터 테이블을 표시합니다. 대화 상자에는 취소 및 제출 버튼이 있습니다. 내 문제는 제출 버튼이 발사되지 않는다는 것입니다. 이상하게도, 대화 상자에서 commandButton이 작동합니다. 내가 버튼을 작동하고 하나를 작동하지 표시 한Primefaces 대화 상자 + commandButton

<body> 
    <ui:composition template="./../resources/mainTemplate.xhtml"> 
     <ui:define name="content"> 
      <h:form> 
       <p:dialog id="dlg" header="#{messages.chooseSkillLevel}" widgetVar="dlg" modal="true" dynamic="true"> 
        <h:dataTable value="#{editSkills.skillsAndLevels}" var="skillslevel"> 
         <h:column> 
          #{skillslevel.skill.umiejetnosc} 
         </h:column> 
         <h:column> 
          <p:selectOneMenu value="#{skillslevel.level}" > 
           <f:selectItems value="#{editSkills.levels}" var="level" itemLabel="#{level.stopien}" itemValue="#{level.id}" /> 
          </p:selectOneMenu> 
         </h:column> 
        </h:dataTable> 
        <p:commandButton value="#{messages.confirm}" action="#{editSkills.showSkillsAndLevels}" oncomplete="dlg.hide();" /> THIS BUTTON IS NOT FIRED 
        <p:commandButton value="#{messages.cancel}" onclick="dlg.hide()"/> 
       </p:dialog> 
       <p:pickList value="#{editSkills.skills}" var="skill" effect="none" 
       itemValue="#{skill.id}" itemLabel="#{skill.umiejetnosc}" 
       showSourceFilter="true" showTargetFilter="true" filterMatchMode="contains" 
       addLabel="#{messages.add}" removeLabel="#{messages.remove}" removeAllLabel="#{messages.removeAll}" > 
        <f:facet name="sourceCaption">#{messages.skillsList}</f:facet> 
        <f:facet name="targetCaption">#{messages.yourSkills}</f:facet> 
        <p:ajax event="transfer" listener="#{editSkills.onTransfer}" /> 
        <p:column style="width:100%;"> 
         #{skill.umiejetnosc} 
        </p:column> 
       </p:pickList> 
       <p:commandButton value="#{messages.confirm}" action="#{editSkills.afterSubmit}" update="dlg" oncomplete="dlg.show()" /> THIS BUTTON WORKS FINE 
       <p:commandButton value="#{messages.cancel}" action="profile" immediate="true"/> 
      </h:form> 
     </ui:define> 
    </ui:composition> 
</body> 

:

여기 내 .xhtml입니다. 작동하도록하려면 어떻게해야합니까?

+0

콘솔을 보았습니까? 아약스를 호출하지 않았습니까? 아니면 단순히 작동하지 않습니까? 서버에 데이터를 보내거나 AJAX가 실행되고'# {editSkills.showSkillsAndLevels} '메소드가 전혀 호출되지 않는다면 방화 녀를 조사 해보시겠습니까? 또한 방화 광이 JS 오류를 표시하지 않는지 확인하십시오. – Mindwin

+0

@Mindwin 전혀 호출되지 않은 것 같습니다. JS 오류도 볼 수 없습니다. – AjMeen

답변

17

당신은 IMO

  1. 는 일반 <h:form/><p:dialog/> 외부를 가져, 그것은 깔끔한 디자인입니다, 내가 번호를 하나의 투표는 다음 중 하나를 시도 할 수 있으며

    <p:dialog id="dlg" header="#{messages.chooseSkillLevel}" widgetVar="dlg" modal="true" dynamic="true"> 
         <h:form> 
          <h:dataTable value="#{editSkills.skillsAndLevels}" var="skillslevel"> 
           <h:column> 
            #{skillslevel.skill.umiejetnosc} 
           </h:column> 
           <h:column> 
            <p:selectOneMenu value="#{skillslevel.level}" > 
             <f:selectItems value="#{editSkills.levels}" var="level" itemLabel="#{level.stopien}" itemValue="#{level.id}" /> 
            </p:selectOneMenu> 
           </h:column> 
          </h:dataTable> 
          <p:commandButton value="#{messages.confirm}" action="#{editSkills.showSkillsAndLevels}" oncomplete="dlg.hide();" /> THIS BUTTON IS NOT FIRED 
          <p:commandButton value="#{messages.cancel}" onclick="dlg.hide()"/> 
          </h:form> 
         </p:dialog> 
    
    대신 내부에 <h:form/>를 넣어
  2. <p:dialog/>appendToBody="false"을 추가하여 대화 상자가 DOM 기능의 html 형식으로 렌더링되도록합니다. HTML 본문의 끝으로 자동 재배치된다는 점에 유의하십시오. 그러나 이로 인해 다양한 브라우저에서 일관성없는 렌더링이 발생할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 내가 한 말을했지만 지금은이 오류가 발생했습니다 : '/user/editSkills.xhtml @ 39,121 itemValue = "# {skill.id}": 클래스 'java.lang.String' 'id'속성이 없습니다. 이상한 점은 선택 목록과 연결되어 있고 이상하게 들리므로 선택 목록이 제대로 작동한다는 것입니다. 어떻게해야합니까? – AjMeen

+0

@AjMeen, 그것은 아마도 # {skill.id}와 # # skillslevel.level}이 같은 데이터 유형이 아니기 때문에 발생하는 다른 문제입니다. (그 중 하나는 문자열이고 다른 하나는 무언가입니다. 그밖에). 하지만 이제 명령 단추가 확실히 발사됩니다. – kolossus

+0

'# {skillslevel.level}'은이 오류와 아무 관련이 없습니다. 오류가 여전히 나타나면'skilsslevel' 부분을 제거하더라도이 오류가 발생합니다. 아마 변환기가 필요할 것입니다. 어쨌든 도움을 주셔서 감사합니다! – AjMeen

4
<p:commandButton value="Cancel" oncomplete="PF('yourDialogWidgedVarName').hide();" process="@this" /> 

u는 widgetVar 이름을 호출 할 때 '을 사용해야합니다. immediate = "true"또는 process = "@ this"를 사용할 수도 있습니다.

+0

즉시 = "true"또는 process = "@ this"가 필요하지 않습니다. 그러나 귀하의 답변에 필요한 정보가 빠릅니다. 감사! – Eric