2013-08-02 158 views
0

我一直在使用JSF(MyFaces)和PrettyFaces一段時間。除POST請求之外,一切正常。
爲什麼JSF POST請求不適用於PrettyFaces

我唯一的問題是,我不能讓POST請求任何由PrettyFaces重寫頁面。 我真的很感激你的幫助,因爲它是一個表演塞。

漂亮-config.xml中

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

的pom.xml

<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> 

我用2.0.4.Final直到今天。我希望它能夠升級到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豆:

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

任何想法,爲什麼不執行POST請求?無論我做什麼,他們都不會發生。沒有錯誤。根本不值一提。當我按下提交(Add comment)按鈕時,Chrome會發出一個請求(ajax/non-ajax(我都試過)),但方法doSomething不會被觸發。

我試圖withing豆viewItem也(在相當配置指定的),但沒有。我試着在100種...

我不得不提,一切都非常面臨配置映射在GET請求很好地工作,只是我無法將它們發佈。

我找不到任何解決方案/回答這個直到現在。
我真的很感激任何幫助。
非常感謝!

+0

如果這真的是PrettyFaces問題,您應該先嚐試。只需從pretty-config.xml文件中刪除映射,然後使用原始URL「/market/view-item.xhtml」測試頁面。在使用路徑參數時,您必須在代碼中硬編碼一些有效的ID以進行簡單的測試。如果這仍然不起作用,您還有其他問題。如果您的操作沒有執行,通常是由回發期間渲染=「false」的某個父組件造成的。你也可以用SessionScoped替換RequestScoped,看看這是否有所作爲。 – chkal

+1

我認爲@chkal所說的是一個開始的好地方。如果這仍然存在問題,請在http://ocpsoft.org/support/的支持論壇上與我們聯繫,並上傳一個可重現此問題的小型示例項目。我們將解決這個問題,併爲您發佈一個新版本,因爲我們討厭錯誤! :) – Lincoln

+0

嗨,夥計們!感謝您的幫助。 @chkal 頁面.xhtml頁面單獨運行正常。 POST不適用於由PrettyFaces映射的鏈接。 SessionScoped不是我要找的。對於林肯: 我會嘗試爲此做一個示例項目。 – zmirc

回答

0


首先,感謝幫助。這是一些奇怪的事情,這就是爲什麼我不能隔離問題(把它在另一個項目中發生的),這是不執行的第一次嘗試POST請求,但是從第二個。 我已經刪除了我在web.xml中的過濾器,沒有任何區別。同樣的行爲。

我剛剛在其他Tomee版本比1.5.2測試項目的想法。令人驚訝的是,從2013年7月29日開發的版本1.6.0似乎沒有這個問題。我爲什麼不早點考慮這一點? (我必須爲我的帖子功能編寫單獨的Servlet組件。)嗯,這意味着不是PrettyFaces有問題(Huraay!),但可能是Apache MyFaces,CDI impl或Tomee中的其他東西。 UF ...我很高興的是,現在的工作。

再次感謝試圖幫助。

//////////////////// ///////////新聞//////////////////////////////////
似乎它在Tomee的其他版本中也不起作用。 問題是在該頁面有一個c:forEach(在該頁面使用的自定義組件內),即使commandButton不在循環內。通過切換到ui:重複,問題在所有版本的Tomee中消失了。

這可能是MyFaces中的一個錯誤,因爲Glassfish 3.1.2.2(與Majorra)沒有這個問題。 (測試)

///////////////////////////////新聞2 ////////// ////////////////////////
哈...更有趣。
如果h:form在c:forEach後面,那麼一次嘗試不會觸發POST方法。它只是從第二次嘗試。這是最初的問題。

如果h:form在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.0'SNAPSHOT'時立即遷移到TomEE + 1.5.2'SNAPSHOT',然後我遷移到TomEE + 1.6.0'SNAPSHOT',並始終嘗試使用最新版本的「SNAPSHOT」JAR文件。我只用這種方式的'SNAPSHOT'版本,'SNAPSHOT'='最新最好的'。 :)

+0

謝謝,但正如我在Tomee的論壇中回答的,我不認爲這是問題,因爲所有的豆類在沒有URL重寫的頁面上正常工作。 此外,所有java類默認都有一個空的構造函數,所以它似乎沒有意義。 – zmirc

相關問題