2011-08-03 30 views
3

我想傳遞一個值來轉換類JSF/SEAM如何將參數值傳遞給java中的Conversion類?

public class ValueConverter implements Converter { 

public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) { 
    if (StringUtils.isNotBlank(value)) { 
    // logic etc here. 

我XHTML是:

<f:converter converterId="ValueConverter"> 
<f:attribute name="theMaxOrderSize" id="maxorder" value="#{_cartItem.item.maxOrderSize}"/> 
</f:converter> 

如何在Java中的參數值傳遞給轉換類?我開始錯了嗎?我正在使用JSF 1.2我認爲......

回答

3

這是你應該用Validator做的事。轉換器只是將字符串轉換爲對象,將對象轉換爲字符串。您正嘗試在Converter中進行驗證。

如何將參數值傳遞給java中的Conversion類?

這是不正確的,你不需要傳遞參數到一個轉換器。它應該是 -

如何在JSF中訪問Converter中的參數?

可以使用的FacesContext -

context.getExternalContext().getRequestParameterMap(); 

我覺得你得到了一大堆讀數做的。祝你好運!

如果你想屬性添加到您的轉換器,然後使用的StateHolder -

public class ValueConverter implements Converter, StateHolder { 
6

Bhesh是完全正確的。您應該在Validator內部完成驗證工作。

至於具體問題,移動<f:attribute><f:converter>的(或<f:validator>如果您正在收聽的是我們)到輸入組件,然後用UIComponent#getAttributes()獲得它。例如。

<h:inputText ...> 
    <f:validator validatorId="valueValidator" /> 
    <f:attribute name="theMaxOrderSize" id="maxorder" value="#{_cartItem.item.maxOrderSize}"/> 
</h:inputText> 

Object theMaxOrderSize = component.getAttributes().get("theMaxOrderSize"); 
// ... 

(其中componentvalidate()方法的UIComponent參數,它表示父輸入組件)

可以將它轉換爲Integer或任何對象類型代表#{_cartItem.item.maxOrderSize}