2010-09-16 23 views
1

我XHTML代碼:JSF2忽略行動attribut

<h:commandLink action="#{detailController.updateProject}" class="positive" > 
<h:graphicImage library="img" name="tick.png" alt=""/> 
<h:outputText value="Save" /> 
</h:commandLink> 

這個動作(updateProject())不從JSF框架調用!即使我在managedBean中刪除它,也不會拋出異常。

是否有人有這樣的問題?我甚至不能解釋 - - 我的意思是這個行動方法就在那裏!


ADD:是的,它是在一個h:form標籤!但在這種觀點下我有兩種形式!這可能是問題嗎?


ADD2:我還應該提到,如果我按下按鈕,它會將我引回到先前的視圖!所以我的行動方法被忽略,而是打開另一個視圖?!?!

提供更多的信息,我的網頁是建立這樣的:

panelGroup name=show rendered=!controller.edit 
    form 
    buttons 
    outputtext 
    /form 
/panelGroup 

panelGroup name=edit rendered=controller.edit 
    form 
    buttons 
    inputText 
    /form 
/panelGroup 

所以我在一個文件中兼得,編輯和一個實體的表演!但只有底部窗體中的按鈕才能顯示出奇怪的行爲(參見上文)。


接聽BalusC: 1.我用兩種形式(!他們沒有嵌套) 2.在底部的形式,我已經放在啊:消息 我會嘗試把我的控制器到viewScop檢查3和4 我不知道如何檢查5. 感謝您的..

回答

3

只是一個簡單的問題:嵌套在裏面<h:form><h:commandLink>

如果不是這種情況,你需要將你的命令鏈接包含在一個表單元素中,否則不起作用。

只是爲了簡化代碼,你可以使用value屬性而不是添加<h:outputText>組件:

<h:commandLink action="#{detailController.updateProject}" class="positive" value="Save"> 
    <h:graphicImage library="img" name="tick.png" alt=""/> 
</h:commandLink> 
+0

+1這是我的答案了。 – 2010-09-16 11:16:30

5

這可以有很多可能的原因。 @romaintaz僅提到了最明顯的一個(最常見的初學者的錯誤):UICommand組件必須放置在UIForm組件內。

然而,有更多的原因:

  1. 你有多個嵌套形式。這在HTML中是非法的。行爲取決於使用的瀏覽器,但通常按鈕不會執行任何操作。您不能嵌套表單,但可以並行使用它們。

  2. 驗證或轉換錯誤已發生,但未被h:message捕獲。通常這會記錄到標準輸出,但您也可以使用h:messages來獲取它們全部。

  3. UICommand組件被置於一個UIData組分(例如h:dataTable),其value後續請求期間不被保存以正確的方式內。如果JSF找不到關聯的數據行,則不會調用該操作。把豆放在view的範圍應該會有很大幫助。

  4. 組件或其父項之一具有rendereddisabled屬性,該屬性在應用請求值階段期間評估false。那麼JSF將不會調用這個動作。把豆放在view的範圍應該會有很大幫助。

  5. 一些PhaseListenerEventListenerFilterServlet在請求 - 響應鏈已經改變JSF生命週期跳過調用動作階段的或改變的所述請求參數,使得JSF不能調用動作。

0

不幸的是,我不知道mistae在哪裏。我想這是關於錯誤的我的JSF代碼。

我通過簡化我的代碼解決了這個問題。從那個xhtml頁面和那個控制器我做了3個xhtml頁面和3個控制器。重構所有我的代碼看起來更容易,現在的工作之後:-)

感謝您有用的建議