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");
}
}