2012-03-09 35 views
2

僅當驗證成功時纔有可能有條件地更新JSF組件?PrimeFaces:驗證時的條件更新

我希望能夠像做

<p:commandLink process="@form" listener="#{foo}" 
    update="something somethingElse"> 

其中「東西」,如果驗證成功只得到更新。

有什麼辦法可以做,或者只是在JSF中不支持?

我已經能夠拼湊樣的黑客的隱藏commandLinks但並不完全滿意:

<p:commandLink process="@form" listener="#{foo}" 
    update="somethingElse" oncomplete="if (!args.validationFailed) $("#link").click();"> 
<p:commandLink style="display:none" id="link" 
    update="something"> 
+1

你爲什麼不用h:message(s)來做這個? – 2012-03-09 17:28:52

+0

我試圖做相反的事情:僅在驗證成功時更新某些內容。 – wrschneider 2012-03-09 20:52:21

+0

oncomplete =「if(!args.validationFailed)$(」#link「)。click();這段代碼不適用於我... :(我的條件更新不起作用... – dhroove 2012-06-15 11:02:17

回答

2

<h:message>(或PrimeFaces'對口<p:message>)是intented這一點。或者,在你的情況下,也許更好,<h:messages>(或<p:messages>)。

public void submit() { 
    // ... 

    if (fail) { 
     FacesContext.getCurrentInstance().addMessage(null, 
      new FacesMessage(FacesMessage.SEVERITY_ERROR, "Fail", null)); 
    } 
} 

<h:messages id="messages" /> 
<p:commandLink process="@form" action="#{bean.submit}" update="messages something" /> 

請注意,你也應該使用正常Validator實施執行驗證。如果它拋出一個ValidatorException,那麼這個動作不會被調用。在動作方法中進行驗證是一種氣味。

+0

我試圖做相反的事情:只有在驗證成功時才更新內容 – wrschneider 2012-03-09 20:53:10

+1

做同樣的事情,但是用「SEVERITY_INFO」和「Success」消息來代替。在驗證失敗時不會被調用,另一種方法是讓action方法設置一些屬性並使用'rendered =「#{not empty bean.someProperty}」' – BalusC 2012-03-10 02:08:38

+0

@BalusC上的另一個變體最後的建議: 'FacesCopntext.getPartialViewContext()。getRenderIds()。add(「updateComponentId」)'在動作偵聽器中。只有在驗證通過的情況下才會執行。 – wrschneider 2012-03-28 13:44:38

2

我不認爲message建議必然回答問題。假設他想更新message以外的東西?

我沒有嘗試過這個,但另一種可行的方法是使用remotecommand

<p:remoteCommand id='good' update='goodUpdates'/> 
<p:remoteCommand id='bad' update='badUpdate'/> 
<p:commandButton oncomplete='if (your-test) good() else bad()'/> 

注意,這將需要另一個往返服務器,因此性能是一個考慮因素。

+0

http://stackoverflow.com/q/17209495順便說一下,'onSuccess'不是有效的XHTML。 – BalusC 2015-05-20 18:41:54

+0

正確。我修正了這個例子(「oncomplete」) – DaBlick 2015-07-21 20:34:29

+1

非常感謝:)但是id不適用於我,我添加了屬性名稱 ..現在工作正常... – 2017-02-02 07:58:52