3.5.11. Атрибуты DOM и CSS
Платформа CUBA предоставляет специальный API для HTML-атрибутов, позволяющий устанавливать DOM и CSS атрибуты для визуальных компонентов.
DOM/CSS атрибуты можно установить программно с помощью бина HtmlAttributes и следующих его методов:
-  
setDomAttribute(Component component, String attributeName, String value)– устанавливает DOM-атрибут для самого верхнего элемента UI-компонента. -  
setCssProperty(Component component, String propertyName, String value)– устанавливает CSS-свойство для самого верхнего элемента UI-компонента. -  
setDomAttribute(Component component, String querySelector, String attributeName, String value)– устанавливает DOM-атрибут для всех вложенных элементов UI-компонента, соответствующих заданному селектору запроса. -  
getDomAttribute(Component component, String querySelector, String attributeName)– получает значение DOM-атрибута, заданное ранее с помощьюHtmlAttributes. Не отражает реальное значение из DOM. -  
removeDomAttribute(Component component, String querySelector, String attributeName)– удаляет DOM-атрибут для всех вложенных элементов UI-компонента, соответствующих заданному селектору запроса. -  
setCssProperty(Component component, String querySelector, String propertyName, String value)– задает значение CSS-свойства для всех вложенных элементов UI-компонента, соответствующих заданному селектору запроса. -  
getCssProperty(Component component, String querySelector, String propertyName)– получает значение CSS-свойства, заданное ранее с помощьюHtmlAttributes. Не отражает реальное значение из DOM. -  
removeCssProperty(Component component, String querySelector, String propertyName)– очищает значение CSS-свойства для всех вложенных элементов UI-компонента, соответствующих заданному селектору запроса. -  
applyCss(Component component, String querySelector, String css)– задает значение CSS-свойства из строки CSS. 
Описанные выше методы принимают следующие параметры:
-  
component– идентификатор компонента. -  
querySelector– строка, содержащая один или несколько селекторов для сопоставления. Эта строка должна быть валидной строкой селектора CSS. -  
attributeName– имя DOM-атрибута (например,title). -  
propertyName– имя CSS-свойства (например,border-color). -  
value– значение атрибута. 
Имена наиболее часто используемых DOM-атрибутов и CSS-свойств доступны как константы класса HtmlAttributes, однако вы можете использовать и свои собственные имена атрибутов.
|  
       Будет ли атрибут работать с конкретным компонентом, зависит от этого компонента. Некоторые визуальные компоненты могут скрыто использовать те же атрибуты для своих собственных нужд, поэтому приведённые выше методы в определенных случаях могут не работать.  |  
    
Чтобы использовать бин HtmlAttributes, его нужно инжектировать в контроллер экрана, например:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="http://schemas.haulmont.com/cuba/screen/window.xsd"
        caption="Demo"
        messagesPack="com.company.demo.web">
    <layout>
        <button id="demoButton"
                caption="msg://demoButton"
                width="33%"/>
    </layout>
</window> 
  import com.haulmont.cuba.gui.components.Button;
import com.haulmont.cuba.gui.components.HtmlAttributes;
import com.haulmont.cuba.gui.screen.Screen;
import com.haulmont.cuba.gui.screen.Subscribe;
import com.haulmont.cuba.gui.screen.UiController;
import com.haulmont.cuba.gui.screen.UiDescriptor;
import javax.inject.Inject;
@UiController("demo_DemoScreen")
@UiDescriptor("demo-screen.xml")
public class DemoScreen extends Screen {
    @Inject
    private Button demoButton;
    @Inject
    protected HtmlAttributes html;
    @Subscribe
    private void onBeforeShow(BeforeShowEvent event) {
        html.setDomAttribute(demoButton, HtmlAttributes.DOM.TITLE, "Hello!");
        html.setCssProperty(demoButton, HtmlAttributes.CSS.BACKGROUND_COLOR, "red");
        html.setCssProperty(demoButton, HtmlAttributes.CSS.BACKGROUND_IMAGE, "none");
        html.setCssProperty(demoButton, HtmlAttributes.CSS.BOX_SHADOW, "none");
        html.setCssProperty(demoButton, HtmlAttributes.CSS.BORDER_COLOR, "red");
        html.setCssProperty(demoButton, "color", "white");
        html.setCssProperty(demoButton, HtmlAttributes.CSS.MAX_WIDTH, "400px");
    }
}