2013-03-12 64 views
0

爲什麼我無法將自定義CSS樣式應用於單個文本框?如何在文本框上以編程方式設置css錯誤樣式

我想在單個文本框上設置一些錯誤樣式。以下實現有什麼問題?

初始化:

static final String STYLES = ErrorRes.INSTANCE.css().style(); 

@UiField TextBox box; 
box.setStylePrimaryName(STYLES); 

資源接口

interface ErrorRes extends ClientBundle { 
    static final ErrorRes INSTANCE = GWT.create(ErrorRes.class); 

    @Source("Error.css") 
    Style css(); 

    interface Style extends CssResource { 
     @ClassName("gwt-TextBox-error") 
     String style(); 
    } 
} 

Error.css

.gwt-TextBox-error { 
    border: 1px solid red !important; 
} 
+0

我不確定這是對的:'box.setStylePrimaryName(STYLES);'。我在幾個月前使用GWT,並且記得[setStylePrimaryName](http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/ui/UIObject.html# setStylePrimaryName%28java.lang.String%29)也更新相關樣式,因爲您正在設置基本樣式而不是錯誤樣式。第二張紙條上,你是否檢出了生成的HTML?它可能會給你更多關於這個問題的提示。 – ThanksForAllTheFish 2013-03-12 11:43:07

+0

我在代碼中嘗試了你的情況,它工作的很好。查看我的更新。 – FFire 2013-03-13 00:02:52

回答

2

如果whant獲得小部件GWT-文本框錯誤樣式名稱,你需要設置box.setStylePrimaryName("gwt-TextBox"); - 這是默認設置。當錯誤發生時使用box.setStyleDependentName("error", true); HTML將爲class =「gwt-TextBox gwt-TextBox-error」。 並清除錯誤的風格,使用box.setStyleDependentName("error", false);

OR

您可以在同樣的方式使用addStyleName("gwt-TextBox-error")removeStyleName("gwt-TextBox-error")

--- UPDATE ---

所以,我tryed你的情況下運行,效果很好。在首先你需要從資源注入的CSS頁面在運行時:

ErrorRes.INSTANCE.css().ensureInjected(); 

我用它在onModuleLoad()

開始時接着,添加錯誤風格用途:box.addStyleName(STYLES);box.removeStyleName(STYLES);將其刪除。

您不能使用配對setStylePrimaryName()setStyleDependentName()與捆綁的css becouse css名稱將被混淆。

+0

如果我把''gwt-TextBox-error「'css類放在我的主css文件中,你的第二個選項完美地工作。但我想爲錯誤樣式有一個單獨的css文件。此外,我不想使用帶有addStyleName(「gwt-TextBox-error」)的字符串文字,而是從上面寫的ErrorRes.INSTANCE中獲取css類名稱。無論如何使用'addStyleName(STYLES)'不起作用。我的ClientBundle有什麼問題嗎? – membersound 2013-03-12 15:08:19

相關問題