2013-08-02 4 views
0

잠시 동안 PrettyFaces에서 JSF (MyFaces)를 사용하고 있습니다. POST 요청을 제외한 모든 것이 완벽하게 작동합니다.
PrettyFaces에서 JSF POST 요청이 작동하지 않는 이유

유일한 문제는 내가 PrettyFaces에 의해 다시 쓰여진 페이지로 POST 요청을 할 수 없다는 것입니다. 쇼 스토퍼이기 때문에 도움을 주시면 감사하겠습니다. 오늘까지 2.0.4.Final을 사용

<dependency> 
    <groupId>org.ocpsoft.rewrite</groupId> 
    <artifactId>rewrite-servlet</artifactId> 
<version>2.0.5.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.ocpsoft.rewrite</groupId> 
    <artifactId>rewrite-config-prettyfaces</artifactId> 
    <version>2.0.5.Final</version> 
</dependency> 

<url-mapping id="market-view-item"> 
    <pattern value="/market/#{viewItem.itemId}" /> 
    <view-id value="/market/view-item.xhtml" /> 
</url-mapping> 

의 pom.xml

꽤-config.xml에. 2.0.5로 업그레이드해도 작동 할 것으로 기대했지만 아무것도하지 않았습니다.

웹 페이지 양식 :

<h:form prependId="false"> 
    <p:inputTextarea rows="3" style="width:450px; margin:5px 0;" autoResize="false"/> 
    <h:commandButton action="#{test.doSomething}" class="pg-button" value="Add comment"/> 
</h:form> 

CDI 콩 : POST 요청이 왜

@Named("test") 
@RequestScoped 
public class TestB { 
    public void doSomething() { 
     System.out.println("I work........."); 
    } 
} 

어떤 아이디어 실행되지 않습니다? 내가하는 일이든, 그들은 단지 일어나지 않습니다. 전혀 오류가 없습니다. 아무것도 아니야.

제출 (Add comment) 버튼을 누르면 Chrome에서 요청 (ajax/non-ajax (두 시도))했지만 doSomething 메소드가 실행되지 않습니다.

콩 (viewItem) (역시 예쁜 구성으로 지정)을 시도했지만 아무것도하지 않았습니다. 나는 100 가지 방법으로 시도했다 ...

나는 모든 예쁜 얼굴 설정 매핑이 GET 요청에서 완벽하게 작동한다는 것을 언급해야한다.

지금까지 해결책/답변을 찾을 수 없습니다.
정말 도움이됩니다.
감사합니다.

+0

이것이 정말로 PrettyFaces 문제인 경우 먼저 시도해야합니다. pretty-config.xml 파일에서 매핑을 제거한 다음 원본 URL "/market/view-item.xhtml"을 사용하여 페이지를 테스트하십시오. 경로 매개 변수를 사용할 때 간단한 테스트를 위해 코드에 유효한 ID를 하드 코딩해야합니다. 그래도 작동하지 않으면 다른 문제가 발생합니다. 액션이 실행되지 않으면 대개 포스트 프로세스 중에 rendered = "false"인 부모 컴포넌트에 의해 발생합니다. RequestScoped를 SessionScoped로 바꿔서 이것이 차이가 나는지 확인할 수도 있습니다. – chkal

+1

@chkal은 시작하기에 좋은 곳이라고 생각합니다. 문제가 계속 발생하면 http://ocpsoft.org/support/의 지원 포럼에 문의하여 문제를 재현하는 작은 샘플 프로젝트를 업로드하십시오. 버그를 싫어하기 때문에 문제를 해결하고 새로운 버전을 출시 할 것입니다! :) – Lincoln

+0

안녕, 얘들 아! 기꺼이 도와 줘서 고마워. @chkal 페이지 .xhtml 페이지가 제대로 작동합니다. POST는 PrettyFaces가 매핑 한 링크에서 작동하지 않습니다. SessionScoped는 내가 찾고있는 것이 아닙니다. 링컨의 경우 : 저는 이것을 위해 샘플 프로젝트를 만들려고합니다. – zmirc

답변

0


우선, 도와 주셔서 감사합니다. 그것은 이상한 것입니다. 그 이유는 (다른 프로젝트에서 발생하기 위해) 문제를 격리 할 수 ​​없었습니다. 첫 번째 시도에서는 POST 요청을 실행하지 않지만 두 번째 시도에서는 POST 요청을 실행하지 않습니다. web.xml에있는 필터를 아무런 차이없이 제거했습니다. 같은 행동.

나는 1.5.2 버전의 다른 Tomee 버전에서 프로젝트를 테스트 해 보았습니다. 놀랍게도, dev 버전 1.6.0에서 29.07.2013로이 문제가없는 것 같습니다. 왜 내가 더 빨리 이것을 생각하지 않았을까? (필자는 필자의 포스트 기능을 위해 별도의 서블릿 컴포넌트를 작성해야만했다.) Aaaah!

글쎄, 이것은 PrettyFaces가 문제가되지 않았지만 (Huraay!), 아마도 Apache MyFaces, CDI impl 또는 Tomee의 다른 것이 었음을 의미한다. UF ... 나는 지금 작동하는지 너무 행복 해요.

감사를 다시 도우려고합니다.

//////////////////// /////////// News ///////////////////////////
그것도 Tomee의 다른 버전에서는 작동하지 않았다. commandButton이 루프 내부에 없더라도 문제는 해당 페이지 (해당 페이지에서 사용되는 사용자 지정 구성 요소 내부)에 c : forEach가 있습니다. ui : repeat로 전환하면 Tomee의 모든 버전에서 문제가 사라집니다.

그것은이 문제가되지 않습니다 (Majorra와) 글래스 피시 3.1.2.2 때문에, 아마에서 MyFaces의 버그입니다. (테스트)

/////////////////////////////// 뉴스 2 ////////// /////////////////////////
하 ... 훨씬 더 흥미 롭습니다.
h : form이 c : forEach 다음에 오는 경우 POST 메서드는 처음 시도시 트리거되지 않습니다. 두 번째 시도에서 바로 작동합니다. 그것이 원래의 문제입니다.

는 H 경우 : C 전에 형태가된다 대해 forEach, Post 메소드 (양식의 조치는) 클릭/처음부터 제대로 실행됩니다.

0

CDI 콩 :

@Named("test") 
@RequestScoped 
public class TestB { 
    public void doSomething() { 
     System.out.println("I work........."); 
    } 
} 

는 당신의 'CDI'콩이 생성자 방법이 부족하고 여기에 문제의 원인이 될 수 있다고 할 수 있습니까?

나는 TomEE + 1.5.1 'SNAPSHOT'이후 TomEE +를 사용하고 있었고 사용 가능한 즉시 TomEE + 1.5.2 'SNAPSHOT'으로 마이그레이션 한 다음 TomEE + 1.6.0 'SNAPSHOT'으로 마이그레이션했습니다. 'SNAPSHOT'JAR 파일의 최신 버전을 항상 사용해보십시오. 나는 'SNAPSHOT'버전을이 방법으로 만 사용하고 'SNAPSHOT'= '최신이고 가장 위대한'. :)

+0

고마워요.하지만 Tomee의 포럼에서 답변 한 것처럼, 나는 이것이 문제라고 생각하지 않습니다. 모든 콩 URL 재 작성없이 페이지에서 제대로 작동합니다. 또한 모든 Java 클래스에는 기본적으로 빈 생성자가 있으므로 의미가없는 것처럼 보입니다. – zmirc