2010-08-05 42 views
4

我試圖inputText轉換爲java.net.URL在JSF頁面:有沒有從inputText到URL的標準JSF轉換器?

... 
<h:form> 
    <h:inputText value="${myBean.url}" /> 
    <h:commandButton type="submit" value="go" /> 
</h:form> 
... 

我的支持bean是:

import java.net.URL; 
@ManagedBean public class MyBean { 
    public URL url; 
} 

我應該從頭開始實現轉換器或者有一些其他的方式?

回答

6

是的,你需要實現一個Converter。對於這種特殊情況並不困難:

package mypackage; 

import java.net.MalformedURLException; 
import java.net.URL; 

import javax.faces.application.FacesMessage; 
import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import javax.faces.convert.Converter; 
import javax.faces.convert.ConverterException; 
import javax.faces.convert.FacesConverter; 

@FacesConverter(forClass=URL.class) 
public class URLConverter implements Converter { 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     try { 
      return new URL(value); 
     } catch (MalformedURLException e) { 
      throw new ConverterException(new FacesMessage(String.format("Cannot convert %s to URL", value)), e); 
     } 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) { 
     return value.toString(); 
    } 

} 

把它放在你的項目的某個地方。由於@FacesConverter它會自動註冊。

+0

非常感謝! :) – yegor256 2010-08-05 14:35:05

+0

不客氣。請注意編輯;我被遺忘了'FacesMessage'。它是在'h:message(s)'中顯示的那個。 – BalusC 2010-08-05 14:39:36

+0

您可能也想要處理空字符串和空字符串。 return(value == null || value.isEmpty())? null:新的URL(值); 和 返回值== null? 「」:value.toString();分別爲 – cyberoblivion 2014-01-31 16:51:22

0

可以實現自定義轉換

http://www.roseindia.net/jsf/customconverter.shtml

希望這有助於

+3

然而,這個網站是一個初學者可以推薦的[最糟糕的Java/JSF源代碼](http://balusc.blogspot.com/2008/06/what-is-it-with-roseindia.html)。而是建議另一個消息來源。 – BalusC 2010-08-05 14:20:21

+0

對不起,O.o我不知道這 我也是一個begginer,我試圖實現jsf和icefaces,並沒有找到商品代碼的例子,我會努力下一次; D – ErVeY 2010-08-05 14:37:46

+0

不用擔心。你自己也是初學者。該網站由僅針對廣告收入的業餘愛好者維護。幾乎每個代碼片段都以一種或其他方式顯示/引入不良做法。例如,那個customconverter文章應該更好地使用'SimpleDateFormat'來在日期和字符串之間進行轉換。另外,JSF內置日期/時間轉換器的事實根本沒有提及。 – BalusC 2010-08-05 14:45:19