Добавление пунктов в logoutButton

Подскажите как добавить пункт в logoutButton?
image

Здравствуйте,

Для начала необходимо расширить базовый класс компонента WebUserActionsButton, чтобы добавить новый пункт:

public class ExtUserActionsButton extends WebUserActionsButton {

    @Override
    protected void initUserMenuButton(boolean authenticated) {
        MenuBar.MenuItem userMenuButton = component.addItem("");
        userMenuButton.setDescription(messages.getMainMessage("userActionsBtnDescription"));
        userMenuButton.setIcon(getIconResource(CubaIcon.USER));
        userMenuButton.setVisible(authenticated);

        // custom action
        userMenuButton.addItem("Demo", (item) -> demo());

        if (security.isScreenPermitted("settings")) {
            userMenuButton.addItem(messages.getMainMessage("settings"),
                    getIconResource(CubaIcon.GEAR), item -> openSettings());
        }

        userMenuButton.addItem(messages.getMainMessage("logoutBtnDescription"),
                getIconResource(CubaIcon.SIGN_OUT), item -> logout());
    }

    protected void demo() {
        UiControllerUtils.getScreenContext(getFrame().getFrameOwner())
                .getNotifications()
                .create(Notifications.NotificationType.HUMANIZED)
                .withCaption("Demo")
                .show();
    }
}

После этого воспользуемся механизмом регистрации новых компонентов. Создадим файл ext-ui-components.xml в корне модуля web:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- modules/web/src/ext-ui-components.xml -->
<components xmlns="http://schemas.haulmont.com/cuba/components.xsd">
    <component>
        <name>userActionsButton</name>
        <componentLoader>com.haulmont.cuba.gui.xml.layout.loaders.UserActionsButtonLoader</componentLoader>
        <class>com.company.sample.web.gui.components.ExtUserActionsButton</class>
    </component>
</components>

Осталось только зарегистрировать этот файл в web-app.properties:

cuba.web.componentsConfig = +ext-ui-components.xml

Результат:

image

Даниил

2 симпатии

Спасибо!

Даниил, добрый день.
Спасибо за такое подробное описание.
Я выполнила всё по вашему описанию, пока что мой пункт в выпадающем списке не появился.
Возможно я не туда добавила расширенный класс.

Мой расширенный класс лежит \modules\web\src\com\company\myproject\web
Возможно, его надо куда-то в другой раздел положить.

Файл ext-ui-components я положила в modules\web\src

UPD:
изменила директорию нахождения ext-ui-components (почитала разные темы, поняла, что неправильно разместила)
перенесла в com/compamy/myproject
попробовала прописать полный путь в web.app-properties
cuba.web.componentsConfig = +com/company/myproject/ext-ui-components.xml

система всё равно при входе идёт в стандартный класс WebUserActionsButton :frowning:

Файл с указанием расширенного класса необходимо положить непосредственно в папку src и указать соответствующий путь для свойства cuba.web.componentsConfig

Перенесла в src

в app-web.properties
cuba.web.componentsConfig = +modules/web/src/ui-ext-components.xml
при входе всё равно попадаю в класс WebUserActionsButton , а не в расширение этого класса

image

Может быть проблема в том, что мой класс WebUserActionsButtonExt
находится в com.company.myproject.web
у вас в примере - в папке ниже com/company/sample/web/gui/components
в моём проекте таких папок нет :face_with_head_bandage:

Должно быть так:

cuba.web.componentsConfig = +ui-ext-components.xml

при таком варианте тоже не попадает в расширение класса WebUserActionsButtonExt , а проходит по классу WebUserActionsButton :sob:

что ещё можно предположить в моём случае?

Я пошел по простому пути: создал эту кнопку из popupButton и применил к ней такие же стили как у logoutButton. И она стала выглядеть точно так же.

3 симпатии

Примерно так:

<popupButton id="logout" icon="font-icon:USER" stylename="c-useractions-button my-popup-without-arrow"
                             autoClose="true">
                    <popup>
                        <vbox stylename="my-popup">
                            <hbox align="MIDDLE_LEFT">
                                <label value=" " icon="font-icon:USER" align="MIDDLE_LEFT"/>
                                <userIndicator id="userIndicator"
                                               align="MIDDLE_LEFT"/>
                            </hbox>
                            <htmlBox width="95%">
                                <templateContents>
                                    <![CDATA[<hr/>]]>
                                </templateContents>
                            </htmlBox>
                            <linkButton caption="msg://Exit" icon="font-icon:SIGN_OUT"
                                        action="logoutBtn"
                                        stylename="c-useractions-button v-menubar-c-useractions-button"/>
                        </vbox>
                    </popup>
                </popupButton>
2 симпатии