commandButton / commandLink / ajax 액션 / 리스너 메소드가 호출되지 않거나 입력 값이 설정 / 업데이트되지 않았습니다


345

사용하는 경우 때때로 <h:commandLink>, <h:commandButton>또는 <f:ajax>action, actionListener또는 listener태그와 관련된 메소드는 호출되지 않습니다. 또는 Bean 특성이 제출 된 UIInput값으로 업데이트되지 않습니다 .

이에 대한 가능한 원인과 해결책은 무엇입니까?

답변:


687

소개

때마다 UICommand구성 요소 ( <h:commandXxx>, <p:commandXxx>, 등) 관련 액션 메소드, 또는 호출에 실패 UIInput구성 요소를 ( <h:inputXxx>, <p:inputXxxx>, 등) 제출 된 값을 처리 및 / 또는 모델의 값을 업데이트하는 데 실패하고 당신은 어떤 googlable 예외가 표시되지 및 / 또는 서버 로그에 경고, 또한 당신이 따라 아약스 예외 핸들러를 구성 할 때 JSF 아약스 요청에 처리 예외 않으며, 당신이 컨텍스트 매개 변수 아래에 설정하면 web.xml,

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

또한 브라우저의 JavaScript 콘솔에 googlable 오류 및 / 또는 경고가 표시되지 않습니다 (Chrome / Firefox23 + / IE9 +에서 F12를 눌러 웹 개발자 툴셋을 연 다음 콘솔 탭을여십시오). 아래 가능한 원인 목록을 확인하십시오.

가능한 원인들

  1. UICommandUIInput구성 요소는 내부에 위치해야합니다 UIForm구성 요소, 예를 들어, <h:form>(그리고하지 일반 HTML <form>, 그렇지 않으면 아무것도 서버에 전송 될 수 없다). UICommand구성 요소에도 type="button"속성 이 없어야 합니다. 그렇지 않으면 JavaScript에만 유용한 데드 버튼이됩니다 onclick. 참조 양식 입력 값을 전송하는 방법 및 JSF 빈의 메소드 호출<시간 :있는 명령을> 다시 게시를 시작하지 않습니다 .

  2. 여러 UIForm구성 요소를 서로 중첩 할 수 없습니다 . 이것은 HTML에서 불법입니다. 브라우저 동작이 지정되지 않았습니다. 포함 파일을 조심하십시오! UIForm컴포넌트를 병렬로 사용할 수 있지만 제출 중에 서로를 처리하지 않습니다. 또한 "신 양식"반 패턴을 조심해야합니다. 의도하지 않은 다른 모든 (보이지 않는) 입력을 동일한 형식으로 처리하거나 확인하지 않도록하십시오 (예 : 동일한 입력의 필수 입력을 가진 숨겨진 대화 상자가있는 경우). 참조 JSF 페이지에서 : <양식 H>를 사용하는 방법? 단일 양식? 여러 형태? 중첩 된 양식? .

  3. 어떤 UIInput값 검증 / 변환 오류가 발생하지합니다. <h:messages>입력 별 <h:message>구성 요소에 표시되지 않은 메시지를 표시하는 데 사용할 수 있습니다 . 인클루드하는 것을 잊지 마십시오 id<h:messages>에서 <f:ajax render>가 아니라 아약스 요청에 업데이트됩니다 그래서 (있는 경우)를. p : commandButton을 누르면 h : messages에 메시지가 표시되지 않음 도 참조하십시오 .

  4. 경우 UICommand또는 UIInput구성 요소가 반복하는 구성 요소의 내부에 배치처럼 <h:dataTable>, <ui:repeat>등, 당신은 정확히 같은 확인해야합니다 value(가) 요청을 제출 양식의 요청 값 위상을 적용하는 동안 보존되어있는 반복하는 구성 요소. JSF는이를 다시 클릭하여 클릭 한 링크 / 버튼 및 제출 된 입력 값을 찾습니다. Bean을 뷰 범위에 배치하거나 Bean의 데이터 모델을로드하여 @PostConstructgetter 메소드가 아닌지 확인하여 수정하십시오. h : dataTable에 대한 데이터베이스에서 모델을로드하는 방법과시기 도 참조하십시오 .

  5. 경우 UICommand또는 UIInput구성 요소가 같은 동적 소스가 포함되어 있습니다 <ui:include src="#{bean.include}">, 당신은 정확히 같은 있는지 확인해야 #{bean.include}값이 양식의보기 빌드 시간 요청을 제출하는 동안 보존됩니다. 컴포넌트 트리를 빌드하는 동안 JSF가 다시 실행합니다. Bean을 뷰 범위에 배치하거나 Bean의 데이터 모델을로드하여 @PostConstructgetter 메소드가 아닌지 확인하여 수정하십시오. 탐색 메뉴로 동적 포함 컨텐츠를 아약스 새로 고치는 방법을 참조하십시오 . (JSF SPA) .

  6. rendered컴퍼넌트와 그 모든 부모와의 속성 test모든 부모의 속성은 <c:if>/ <c:when>에 평가 안 false(가) 요청을 제출 양식의 요청 값 위상을 적용하는 동안. JSF는 변조 / 해킹 요청에 대한 보호의 일부로이를 다시 검사합니다. A의 조건에 대한 변수가 책임을 보관 @ViewScoped콩이나 제대로 조건을 preinitializing하고 있는지 확인하고 @PostConstruct(A)의 @RequestScoped그것을 수정해야 콩. disabled구성 요소 속성 에도 동일하게 적용되며 , 이는 true요청 값 적용 단계에서 평가되어서는 안됩니다 . 참조 JSF있는 명령 조치가 호출되지 , 폼 처리되지 조건부 렌더링 구성 요소에 제출 하고<h : panelGroup rendered>에 래핑하면 h : commandButton이 작동하지 않습니다 .

  7. onclick의 속성 UICommand구성 요소와 onsubmit의 속성 UIForm구성 요소는 반환하지 않아야 false또는 자바 스크립트 오류가 발생합니다. 의 경우가해야 <h:commandLink>하거나 <f:ajax>또한 브라우저의 JS 콘솔에서 볼 수없는 JS 오류 수 없습니다. 일반적으로 정확한 오류 메시지를 인터넷 검색하면 이미 답변이 제공됩니다. 참조 catch되지 않은 TypeErrors에서 PrimeFaces 결과에 수동으로 추가 /로드 jQuery를 .

  8. JSF 2.x <f:ajax>또는 PrimeFaces 를 통해 Ajax를 사용하는 경우 . 대신 마스터 템플릿 <p:commandXxx>이 있는지 확인하십시오 . 그렇지 않으면 JSF는 Ajax 함수가 포함 된 필요한 JavaScript 파일을 자동으로 포함 할 수 없습니다. 브라우저의 JS 콘솔에서 "mojarra is not defined"또는 "PrimeFaces is not defined"와 같은 JavaScript 오류가 발생합니다. 참조 시간을 : f를 함께 사용하면 CommandLink는 용의 ActionListener가 호출되지 않습니다 아약스 및 UI : 반복 .<h:head><head>

  9. Ajax를 사용하는 경우 제출 된 값이로 끝나는 경우 관심 null있는 UIInputUICommand구성 요소가 <f:ajax execute>또는 로 덮여 있는지 확인하십시오 <p:commandXxx process>. 그렇지 않으면 실행 / 처리되지 않습니다. <h : commandButton>에 <f : ajax>를 추가 하고 PrimeFaces 프로세스 / 업데이트 및 JSF f : ajax 실행 / 렌더 속성 이해 시 모델에서 업데이트되지 않은 제출 된 양식 값을 참조하십시오 .

  10. 제출 된 값이 여전히로 끝나고 nullCDI를 사용하여 Bean을 관리하는 경우 올바른 패키지에서 범위 어노테이션을 가져와야합니다. 그렇지 않으면 CDI는 기본적으로 @DependentEL의 모든 단일 평가에서 Bean을 효과적으로 다시 작성합니다. 표현. 또한 참조 콩 푼다 범위를 @SessionScoped 모든 시간을 다시 가져옵니다 필드가 null이 될기본은 JSF 2 애플리케이션에서 관리 빈 범위 무엇입니까?

  11. 버튼이 있는 <h:form>with의 부모가 UICommand동일한 페이지의 다른 양식에서 오는 ajax 요청에 의해 미리 렌더링 / 업데이트 된 경우 첫 번째 조치는 항상 JSF 2.2 이상에서 실패합니다. 두 번째 및 후속 조치가 작동합니다. 이는 JSF 스펙 문제 790 으로보고 되고 현재 JSF 2.3에서 수정 된 뷰 상태 처리의 버그로 인해 발생합니다 . 이전의 JSF 버전의 경우 명시 적으로의 ID를 지정해야 <h:form>에서 render<f:ajax>. 참조 시간을 :있는 명령 / h는 : CommandLink는이 첫 번째 클릭에서 작동하지 않습니다, 단지 두 번째 클릭에서 작동합니다 .

  12. 이 경우 <h:form>enctype="multipart/form-data"지원 파일 업로드하기 위해 설정 한 다음 당신은 당신이, 그렇지 않으면 적어도 JSF 2.2를 사용하거나 다중 / 폼 데이터 요청을 구문 분석을 담당하는 서블릿 필터가 제대로 구성되어 있는지하고 있는지 확인해야 FacesServlet의지를 결국 요청 매개 변수가 전혀 없으므로 요청 값을 적용 할 수 없습니다. 이러한 필터를 구성하는 방법은 사용중인 파일 업로드 구성 요소에 따라 다릅니다. Tomahawk의 경우이 답변을<t:inputFileUpload> 확인 하고 PrimeFaces의 경우이 답변을 확인 하십시오 . 또는 실제로 파일을 전혀 업로드하지 않는 경우 속성을 모두 제거하십시오.<p:fileUpload>

  13. ActionEvent인수 actionListenerjavax.faces.event.ActionEventand not not 인지 확인하십시오. java.awt.event.ActionEvent이것이 대부분의 IDE에서 첫 번째 자동 완성 옵션으로 제안하는 것입니다. 당신이 사용한다면 인수가 없다는 것도 잘못 actionListener="#{bean.method}"입니다. 메소드에 인수를 원하지 않으면을 사용하십시오 actionListener="#{bean.method()}". 아니면 실제로 action대신에 사용하고 싶을 수도 있습니다 actionListener. action과 actionListener의 차이점을 참조하십시오 .

  14. 없는지를 확인 PhaseListener또는 EventListener요청 - 응답 체인의 예를 들어 호출하여 호출 작업 단계 건너 뛸 수있는 JSF 라이프 사이클 변경 FacesContext#renderResponse()또는 FacesContext#responseComplete().

  15. 어쨌든 같은 요청-응답 체인이 아니 Filter거나 Servlet요청을 차단 하지 않았는지 확인하십시오 FacesServlet. 예를 들어, 스프링 보안과 같은 로그인 / 보안 필터. 특히 기본적으로 UI 피드백이없는 아약스 요청에서 발생합니다. Spring Security 4 및 PrimeFaces 5 AJAX 요청 처리 도 참조하십시오 .

  16. 당신이 PrimeFaces 사용하는 경우 <p:dialog>또는를 <p:overlayPanel>하고 있는지 그들은 자신이 있는지 확인 <h:form>. 이러한 컴포넌트는 기본적으로 JavaScript로 HTML 끝으로 재배치됩니다 <body>. 따라서 원래 내부에 앉아 <form>있었다면 이제 더 이상에 앉아 있지 않습니다 <form>. 참조 페이지를 :있는 명령 조치가 페이지 내에서 작업을하지 않는 : 대화를

  17. 프레임 워크의 버그. 예를 들어 RichFaces에는 속성이 있는 UI 요소 (또는 경우에 따라 하위 요소)를 사용할 때 " 변환 오류 "가 있습니다. 이 버그는 달력 날짜에 값이 설정되지 않은 경우 Bean 메소드가 호출되지 않도록합니다. 간단한 작업 예제로 시작하고 버그가 발견 될 때까지 페이지를 백업하여 프레임 워크 버그를 추적 할 수 있습니다.rich:calendardefaultLabelrich:placeholder

디버깅 힌트

여전히 멈췄다면 이제 디버깅해야합니다. 클라이언트 측에서 웹 브라우저에서 F12를 눌러 웹 개발자 툴셋을 엽니 다. 콘솔 탭을 클릭하면 JavaScript conosle이 표시됩니다. JavaScript 오류가 없어야합니다. 아래 스크린 샷은 Chrome의 예이며, 위의 7 항에 설명 된대로 선언 <f:ajax>되지 않은 상태 에서 활성화 된 버튼을 제출하는 경우를 보여줍니다 <h:head>.

JS 콘솔

네트워크 탭을 클릭하여 HTTP 트래픽 모니터를보십시오. 양식을 제출하고 요청 헤더 및 양식 데이터와 응답 본문이 예상과 같은지 조사하십시오. 스크린 샷 아래의 성공적인 아약스가 하나와 간단한 양식의 제출을 보여 크롬에서 예입니다 <h:inputText>단일 <h:commandButton>와 함께 <f:ajax execute="@form" render="@form">.

네트워크 모니터

(경고 : 프로덕션 환경에서 위와 같은 HTTP 요청 헤더에서 스크린 샷을 게시 할 때 세션 하이재킹 공격을 피하기 위해 스크린 샷에서 세션 쿠키를 스크램블 / 난독 처리해야합니다!)

서버 측에서 서버가 디버그 모드에서 시작되었는지 확인하십시오. 양식 제출을 처리하는 동안 호출 될 것으로 예상되는 JSF 구성 요소의 메소드에 디버그 중단 점을 두십시오. 예 :이 경우 UICommand구성 요소, 그 것 UICommand#queueEvent()과의 경우 UIInput구성 요소, 그 것이다 UIInput#validate(). 코드 실행을 단계별로 진행하고 흐름과 변수가 예상과 같은지 검사하십시오. 아래 스크린 샷은 Eclipse 디버거의 예입니다.

디버그 서버


1
당신의 두 번째 요점은 오랫동안 생각하게 만들었습니다. 내 주 파일의 f : view 태그가 대부분의 문제의 원인이라는 것을 알았습니다. 그리고 아마도 폼을 렌더링하기 때문일까요?
Paulo Guedes

2
@ pauloguedes f : view가 폼을 렌더링한다는 내용을 찾을 수 없습니다. 내 이해는 그것이 단지 컨테이너라는 것입니다. 내 경험상 f : view는 요소를 렌더링하지 않습니다.
Lucas

@balusc commandLink가 dataTable 자체에없는 경우, 포인트 4에 대한 약간의 설명이 여전히 중요합니까?
Lucas

뷰 스코프에 bean을 두거나 bean의 (post) 생성자에 데이터 모델을로드하고 getter 메소드가 아닌 데이터 모델을로드해야합니다.
merveotesi

2
@Kukeltje : 그것은 EL 예외를 던졌을 것입니다 (이미 답변의 첫 번째 단락에서 다룹니다)
BalusC

54

귀하의 h:commandLink내부에있는 h:dataTable경우 다른 이유가 h:commandLink있습니다.

링크 된 기본 데이터 소스 h:dataTable는 링크를 클릭 할 때 트리거되는 두 번째 JSF 라이프 사이클에서도 사용 가능해야합니다.

따라서 기본 데이터 소스가 요청 범위를 지정하면 h:commandLink작동하지 않습니다!


2
좋아, 그것은 나에게 완전히 분명하지 않았다. 어쨌든 UICommand / UIData를 명시 적으로 다루지 않았기 때문에 어쨌든 내 대답이 도움이되기를 바랍니다. 은 "솔루션"... 세션 범위에 요청 범위 내에서지지 콩을 추진했다
jbandi

1
감사 - 나는 두 번째 옌스 코멘트는 ... 내 RequestScoped 빈을 설정하면 SessionScoped 내 데이터 테이블에 차이 만들 수
잭 컴버

28

내 대답은 100 % 적용 할 수는 없지만 대부분의 검색 엔진은 이것을 첫 번째 인기 항목으로 생각하지만 그럼에도 불구하고 게시하기로 결정했습니다.

당신이 사용하는 경우 PrimeFaces (또는 유사한 API)를 p:commandButton하거나 p:commandLink, 기회는 당신이 명시 적으로 추가 할 잊어 버린 것을있는 process="@this"명령의 구성 요소.

PrimeFaces 사용 설명서 섹션 3.18에서 언급 된 바와 같이, 대한 기본값 processupdate모두 @form거의 당신이 일반 JSF에서 기대할 수있는 기본적으로 반대하는, f:ajax또는이다 RichFaces, execute="@this"그리고 render="@none"각각을.

알아 내기 위해 나에게 충분한 시간을 보냈다. (... 그리고 JSF와 다른 기본값을 사용하는 것은 다소 번거로운 것 같습니다!)


6
PrimeFaces의 기본값 process@form입니다. 따라서 액션이 이런 식으로 호출되지 않지만를 사용할 때 수행되는 경우 @this내 답변의 3 점이 적용됩니다.
BalusC

3
이럴 수 없습니다. p:commandButton추가 할 때까지 actionListener 메서드를 호출하지 않는 것이있었습니다 process="@this". 또한 PrimeFaces 사용 설명서에 섹션 3.18 및 3.19에서 언급 한 기본값이 명시 적으로 나열되어 있습니다. 현재 위치 : primefaces.googlecode.com/files/primefaces_users_guide_3_4.pdf ... 아마도 기본값이 변경 되었습니까?
카우

8
문서에 오류가있을 수 있습니다. 제거 process="@this"하고 추가 <p:messages autoUpdate="true">하거나 대기열에 있지만 표시되지 않은 메시지에 대한 서버 로그를 읽으면 실제로 변환 / 검증 오류가 발생했음을 알 수 있습니다.
BalusC

이 질문을 왜 제거 했습니까? stackoverflow.com/questions/60673695/…
Kukeltje

나는 그것이 그다지 가치가 없을 것이라고 생각했습니다 ... 나는 그것을 삭제하지 않았습니다.
Kawu

9

Primefaces와 관련하여 한 가지 더 언급하겠습니다 p:commandButton!

p:commandButton서버에서 수행해야 할 작업에 a 를 사용 하면 서버에 ajax / non-ajax 요청을 발생시키지 않고 사용자 지정 자바 스크립트를 실행하는 데 사용되는 푸시 버튼에 사용할 수 type="button"없기 때문에 사용할 수 없습니다 .

이를 위해 type속성을 분배하거나 (기본값은 "submit") 명시 적으로 사용할 수 있습니다 type="submit".

이것이 누군가를 도울 수 있기를 바랍니다!


이것은 우리 페이지 중 하나의 주요 문제였습니다. 허용 된 답변의 어떤 점도 우리를 더 가깝게 만들지 못했습니다.이 정보를 어디에서 찾았습니까?
Uriel Arvizu

글쎄, 나는 그 문제를 여러 번 가지고 있었고, 연구하고 p:commandButton여러 type속성 값 을 가진 것을 발견했으며 button클라이언트 측에 관한 모든 것입니다. Primefacesdoc에서 이것을 찾기는 약간 어렵지만 여기에 하나의 링크가 있습니다. developer.am/primefaces/…
akelec

제출 힌트가 며칠 동안 직면했던 내 문제를 해결했습니다. 많은 게시물 감사합니다!
gpuk360

고마워, 내 기쁨이야 우리 중 많은 사람들이 그런 문제를 겪었 기 때문에 고의적으로이 대답을했습니다. 무슨 일인지 깨달을 때까지 나는 며칠을 잃었다.
akelec

3

이 문제를 직접 해결 하고이 문제의 원인을 하나 더 발견했습니다. * .xhtml에 사용 된 특성에 대한 백킹 Bean에 setter 메소드가없는 경우 조치가 호출되지 않습니다.


5
다소 자기 설명적인 결과를 가져 왔어 야했다 PropertyNotWritableException. 보이지 않으면 적절한 ajax 예외 처리기없이 ajax 요청을 시작했지만 서버 로그에 표시되어야합니다.
BalusC

3
p : commandButton의 ajax = "false"를 만들 때까지 해당 예외를 표시하지 않았습니다.
Dnavir

고맙습니다 당신은 내 생명을 구했습니다
exrezzo

3

최근 IBM Extended Faces Components를 사용하여 JSF 1.2 애플리케이션에서 호출하지 않는 UICommand에 문제가 발생했습니다.

데이터 테이블의 행 (확장 버전 <hx:datatable>) 에 명령 단추가 있었고 UICommand는 테이블의 특정 행에서 실행되지 않습니다 (발행되지 않는 행은 기본 행 표시 크기보다 큰 행이었습니다).

표시 할 행 수를 선택하기위한 드롭 다운 구성 요소가 있습니다. 이 필드를 뒷받침하는 값은입니다 RequestScope. 테이블 자체를 뒷받침하는 데이터는 일종의 ViewScope(실제로는 일시적으로 SessionScope)있었습니다.

데이터 테이블의 rows속성에 바인드 된 제어를 통해 행 표시가 증가한 경우이 변경의 결과로 표시되는 행은 클릭 할 때 UICommand를 실행할 수 없습니다.

이 속성을 테이블 데이터 자체와 동일한 범위에두면 문제가 해결되었습니다.

위의 BalusC # 4에서 언급 한 것으로 생각되지만 테이블 값은 View 또는 Session 범위 여야 할뿐만 아니라 해당 테이블에 표시 할 행 수를 제어하는 ​​특성이어야했습니다.


2

나는이 문제도 가지고 있었고 브라우저의 웹 콘솔을 연 후에 근본 원인을 찾기 시작했습니다. 그때까지는 오류 메시지를 얻을 수 없었습니다 (조차도 <p:messages>). 웹 콘솔에에서 HTTP 405 상태 코드가 다시 나타났습니다 <h:commandButton type="submit" action="#{myBean.submit}">.

제 경우에는 Auth0 및 JSF 페이스 렛을 통해 OAuth 인증을 제공하는 바닐라 HttpServlet과 애플리케이션 뷰 및 비즈니스 로직을 수행하는 Bean을 혼합했습니다.

web.xml을 리팩토링하고 중개인 서블릿을 제거하면 "마 법적으로"작동했습니다.

결론적으로, 문제는 Middle-man-servlet이 RequestDispatcher.forward (...)를 사용하여 HttpServlet 환경에서 JSF 환경으로 리디렉션하는 반면 서블릿은 HttpServletResponse.sendRedirect (.. ).

기본적으로 sendRedirect ()를 사용하면 JSF "컨테이너"가 제어 할 수 있지만 RequestDispatcher.forward ()는 분명히 그렇지 않습니다.

내가 모르는 것은 Facelet이 bean 속성에 액세스 할 수 있었지만 설정할 수 없었기 때문에 서블릿과 JSF의 혼합을 없애기 위해 비명을 지르지 만, 이것이 누군가가 많은 시간을 낭비하지 않도록 도와주기를 바랍니다. 테이블 뱅잉.


1

<h:commandLink>의 작업 richfaces datatable이 해고되지 않는 문제를 디버깅하는 데 많은 재미가있었습니다 . 이 테이블은 어느 시점에서 작동했지만 명백한 이유없이 중단되었습니다. 나는 돌을 돌리지 않았고, 내 rich:datatable잘못 rowKeyConverter을 사용하고 있음을 알기 위해 richfaces가 행 키로 행복하게 사용되는 null을 반환했습니다. 이로 인해 내 <h:commandLink>작업이 호출 되지 않았습니다 .


0

또 다른 가능성 : 첫 번째 호출이 작동하지만 다음 호출이 작동하지 않는 증상 인 경우 여기에 설명 된대로 JSF 2.2와 함께 PrimeFaces 3.x를 사용할 수 있습니다. No ViewState is sent .


-1

나는 다음과 같은 문제를 해결했다.

<h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>

에:

<h:form>
     <h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>
</h:form>

600 개가 넘은 답에서 1 위입니다. 별도의 답변으로 작성할 필요가 없습니다.
Kukeltje

-1

이것이 나를 위해 일한 해결책입니다.

<p:commandButton id="b1" value="Save" process="userGroupSetupForm"
                    actionListener="#{userGroupSetupController.saveData()}" 
                    update="growl userGroupList userGroupSetupForm" />

여기서 Ajax 호출에는 process = "userGroupSetupForm"속성이 필수입니다. actionListener가 @ViewScope Bean에서 메소드를 호출 중입니다. 또한 growl 메시지, Datatable : userGroupList 및 Form : userGroupSetupForm을 업데이트합니다.


-2
<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" /> <!--Working-->
    </p:dialog>
  </h:form>

  <h:form id="form2">
    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" /> <!--Not Working-->
    </p:dialog>
  </h:form>
</ui:composition>

해결하다;

<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" />   <!-- Working  -->
    </p:dialog>

    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" />   <!--Working  -->
    </p:dialog>
  </h:form>
  <h:form id="form2">
    <!-- ..........  -->
  </h:form>
</ui:composition>

미안하지만 이것은 겸손한 견해로는 전혀 사실이 아닙니다. 2 개의 대화 상자가 작동하려면 자신의 형식이어야한다고 효과적으로 설명합니다. 99 % 확실성을 가진 당신은 당신이 해결 한 다른 문제를 가지고 있었고 이것이 지금 이것이 해결책이라고 생각합니다 ...
Kukeltje

이 페이지가 포함되어 있습니다. 아마도 이것이 문제를 일으킬 수 있습니다. 투표하기 전에 테스트해야합니다.
Kenan Gökbak

아니요, 게시하기 전에 최소한의 재현 가능한 예제 를 작성해야합니다 (그리고 테스트 만 할 수 있습니다). . 첫 번째 예는 완벽하고 두 번째 예는 100 % 확실성으로 존재하지 않는 문제의 해결책이 아닙니다
Kukeltje

어쨌든. 내 응용 프로그램이 제대로 작동합니다. 대화 상자가 양식의 위치에있는 것은 중요하지 않다고 생각합니다. 다른 문제를 해결하려면 두 번째 양식을 만들어야합니다.
Kenan Gökbak

귀하의 응용 프로그램이 작동하고 있지만 원래 문제와 귀하의 해결책에서 명확하지 않거나 보이지 않습니다. 게다가, 당신은 _ "대화 상자의 형태가 중요하지 않다고 생각합니다."_하지만 당신의 대답에서는 그것이 어디에 있는지 중요합니다. 내 진술을 뒷받침하는 모순. 죄송합니다, 그러나 당신의 대답은 분명하지 않습니다 ... (이미 이미 다른 downvote가 있습니다)
Kukeltje
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.