2013-10-16 60 views
0

我有一個h:commandButton需要在bean中設置一個屬性。根據變量的值,我可能需要設置不同的屬性。以下是我試過有條件地設置h上的目標屬性:setPropertyActionListener

<h:commandButton value="Procedi"> 
    <f:ajax event="click" /> 
    <f:setPropertyActionListener 
     target="#{comparisonSide eq 'Left' ? compareManaged.optionalLeft : compareManaged.optionalRight}" 
     value="#{comparisonSide eq 'Left' ? optionalManaged.selectedOptionalsLeft : optionalManaged.selectedOptionalsRight }" /> 
</h:commandButton> 

這似乎並沒有工作,因爲語法我試圖在setPropertyActionListenertarget屬性使用(也就是說,你不能使用三元運算符有)的代碼。

有沒有一種方法來實現這種有條件的定位而不用亂丟我的代碼c:if的?

P.S.如果有幫助,我使用myfaces和richfaces。

回答

0

正如你在評論中正確地陳述的那樣,問題是target屬性決定了設置值的屬性,而JSF找不到它。

您可以將兩個屬性更新拆分爲兩個單獨的<f:setPropertyActionListener>實例,並且每個操作偵聽器都使用相關值更新相關屬性。

<f:setPropertyActionListener 
    target="#{compareManaged.optionalLeft}" 
    value="#{comparisonSide eq 'Left' ? optionalManaged.selectedOptionalsLeft : '' }" /> 
<f:setPropertyActionListener 
    target="#{compareManaged.optionalRight}" 
    value="#{comparisonSide eq 'Left' ? '' : optionalManaged.selectedOptionalsRight }" /> 

您當然也可以直接在您的動作或actionlistener方法中完成這項工作。

+0

也許在我的問題中並不清楚,但這兩項任務是相互排斥的。編輯:哦,現在我看到你做了什麼。無論如何,optionalLeft和optionalRight是對象列表,並且它們不能被覆蓋。是的,也許我應該更深入地說明問題 –

+0

這是,但我建議將其他屬性等同於一個空字符串。 – skuntsel

+0

也許那麼你在這種情況下有設計問題? – skuntsel

相關問題