zk выбор элемента списка программным способом - PullRequest
2 голосов
/ 21 марта 2010

Я не могу установить значение combobox программно, может кто-нибудь сказать мне, чего не хватает в коде

 public class Profile extends Window implements AfterCompose {

    @Override
    public void afterCompose() {
       Session session = Sessions.getCurrent(false);
                ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(
                (ServletContext) getDesktop().getWebApp().getNativeContext());

        UsersDao usersDao = (UsersDao) ctx.getBean("daoUsers");


        User user = (User) session.getAttribute("user");
        user = usersDao.getUser(user.getUsername(),user.getPassword());

        Textbox username_t = (Textbox) this.getFellow("username");
        Textbox password_t = (Textbox) this.getFellow("password");
        Textbox conpassword_t = (Textbox) this.getFellow("con_password");
        Textbox firstname_t = (Textbox) this.getFellow("firstName");
        Textbox lastname_t = (Textbox) this.getFellow("lastName");
        Textbox email_t = (Textbox) this.getFellow("email");
        Combobox hintQuestion_t = (Combobox) this.getFellow("hintQuestion");
        Textbox hintAnswer_t = (Textbox) this.getFellow("hintAnswer");
        Combobox locale_t = (Combobox) this.getFellow("locale");
        Combobox authority_t = (Combobox) this.getFellow("authority");

        username_t.setText(user.getUsername());
        firstname_t.setText(user.getUserDetails().getFirstName());
        lastname_t.setText(user.getUserDetails().getLastName());
        email_t.setText(user.getUserDetails().getEmail());
        Comboitem selectedItem = getSelectedIndexComboboxItem(hintQuestion_t, user.getHintQuestion());
        hintQuestion_t.setSelectedItem(selectedItem);
        hintAnswer_t.setText(user.getHintAnswer());
        selectedItem = getSelectedIndexComboboxItem(locale_t, user.getUserDetails().getLocale());
        locale_t.setSelectedItem(selectedItem);
        selectedItem = getSelectedIndexComboboxItem(authority_t, ((Authority)user.getAuthorities().toArray()[0]).getRole());
        authority_t.setSelectedItem(selectedItem);


    }

   private Comboitem getSelectedIndexComboboxItem(Combobox combobox, String value) {
        List<Comboitem> items = combobox.getItems();
        Comboitem item = items.get(0);
        for (int i = 0; i < items.size(); i++) {
            Comboitem comboitem = items.get(i);
            String label = (String)comboitem.getLabel();
            String cval = (String)comboitem.getValue();
            if ((label!=null && label.equalsIgnoreCase(value)) || (cval != null  && cval.equalsIgnoreCase(value))) {
                item = comboitem;
                break;
            }
        }
        return item;
    }
}

// файл zk

<window id="profile" use="com.jf.web.zk.ui.Profile">
        <tabbox  id="tabbox" width="40%" >
            <tabs>
                <tab label="Account Information"/>
                <tab label="Personal Information"/>
                <tab label="Contact Details"/>
            </tabs>
            <tabpanels>
                <tabpanel>
                    <grid>
                        <rows>
                            <row>
                                <label value="${i18nUtils.message('user.username')}"/>
                                <hbox>
                                    <textbox id="username" />*,a-zA-Z,0-9
                                </hbox>
                            </row>
                            <row>
                                <label value="${i18nUtils.message('user.password')}"/>
                                <hbox>
                                    <textbox id="password" type="password"/>*
                                </hbox>
                            </row>
                            <row>
                                <label value="${i18nUtils.message('registration.user.password.confirm')}"/>
                                <hbox>
                                    <textbox id="con_password" type="password"/>*
                                </hbox>
                            </row>
                            <row>
                                <label value="${i18nUtils.message('user.details.first.name')}"/>
                                <hbox>
                                    <textbox id="firstName" type="text"/>*
                                </hbox>
                            </row>
                            <row>
                                <label value="${i18nUtils.message('user.details.last.name')}"/>
                                <hbox>
                                    <textbox id="lastName" type="text"/>*
                                </hbox>
                            </row>
                            <row>
                                <label value="${i18nUtils.message('user.details.email')}"/>
                                <hbox>
                                    <textbox id="email" type="text"/>*
                                </hbox>
                            </row>
                            <row>
                                <label value="${i18nUtils.message('user.hint.question')}"/>
                                <hbox>
                                    <combobox id="hintQuestion" onCreate='self.setSelectedIndex(1);'>
                                        <comboitem label="${i18nUtils.message('user.hint.question.possible.value1')}" />
                                        <comboitem label="${i18nUtils.message('user.hint.question.possible.value2')}" />
                                        <comboitem label="${i18nUtils.message('user.hint.question.possible.value3')}" />
                                        <comboitem label="${i18nUtils.message('user.hint.question.possible.value4')}" />
                                        <comboitem label="${i18nUtils.message('user.hint.question.possible.value5')}" />
                                    </combobox>*
                                </hbox>
                            </row>
                            <row>
                                <label value="${i18nUtils.message('user.hint.answer')}"/>
                                <hbox>
                                    <textbox id="hintAnswer" type="text"/>*
                                </hbox>
                            </row>
                            <row>
                                <label value="${i18nUtils.message('user.details.locale')}"/>
                                <hbox>
                                    <combobox id="locale" onCreate='self.setSelectedIndex(1);self.setReadonly(true);'>
                                        <comboitem label="${i18nUtils.message('user.details.locale.en')}" value="en_US"/>
                                        <comboitem label="${i18nUtils.message('user.details.locale.bg')}" value="bg_BG"/>
                                    </combobox>*
                                </hbox>
                            </row>
                            <row>
                                <label value="${i18nUtils.message('authority.account.type')}"/>
                                <hbox>
                                    <combobox id="authority" onCreate='self.setSelectedIndex(0);self.setReadonly(true);'>
                                        <comboitem label="${i18nUtils.message('authority.job.seeker')}" value="Job Seeker"/>
                                        <comboitem label="${i18nUtils.message('authority.employer')}" value="Employer"/>
                                        <comboitem label="${i18nUtils.message('authority.hra')}" value="Human Resource Agency"/>
                                        <comboitem label="${i18nUtils.message('authority.advertiser')}" value="Advertiser"/>
                                    </combobox>*
                                </hbox>
                            </row>
                        </rows>
                    </grid>
                </tabpanel>
            </tabpanels>
        </tabbox>
        <grid width="40%">
            <rows>
                <row>
                    <button label="${i18nUtils.message('bttn.save')}" onClick="save()"/>
                    <button label="${i18nUtils.message('bttn.cancel')}" onClick="cancel()"/>
                </row>
            </rows>
        </grid>
    </window>
</zk>

"getSelectedIndexComboboxItem ()" возвращает правильный выбранный элемент, но, похоже, не влияет на пользовательский интерфейс. Как, например, в качестве локали задан болгарский язык по умолчанию, и мне нужно установить английский.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2010

Просто глядя на ваш код, я вижу несколько неправильных вещей в дополнение к тому, на что указал Миклос.

Вы используете getfellow от Java-композитора.Однако вам не следует делать это, поскольку ZK автоматически подключит компоненты для вас.Вам необходимо использовать шаблон MVC и расширить GenericForwardComposer.Вот пример:

Файл ZUL

<window title="composer5 example" border="normal" width="300px" apply="example.MyComposer">
    <grid>
        <rows>
            <row>First Name: <textbox id="firstName"/></row><!-- forward is removed -->
            <row>Last Name: <textbox id="lastName"/></row><!-- forward is removed -->
            <row>Full Name: <label id="fullName"/></row>
        </rows>
    </grid>
</window>

Файл Java

package example;

public class MyComposer extends GenericForwardComposer {
    private Textbox firstName;
    private Textbox lastName;
    private Label fullName;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        // TODO Auto-generated method stub
        super.doAfterCompose(comp);
    }

    //onChange event from firstName component
    public void onChange$firstName(Event event) { 
        fullName.setValue(firstName.getValue()+" "+lastName.getValue());
    }

    //onChange event from lastName component
    public void onChange$lastName(Event event) {
        fullName.setValue(firstName.getValue()+" "+lastName.getValue());
    }
}

Для получения дополнительной информации вы можетеобратитесь к документации

С функцией, чтобы получить выбранный элемент, почему бы просто не использовать Combobox's getSelectedItem ?Даже если вы используете Listbox, как предложил Миклос, вы также можете использовать ту же функцию.

Что касается установки выбранного элемента, вам необходимо обновить версию ZK до последней.У меня нет проблем с этим.

0 голосов
/ 21 марта 2010

Я думаю, что это ошибка в вашей версии ZK. Вы можете попробовать использовать setSelectedItemApi или setSelectedItemIndex вместо setSelectedItem.

С другой стороны, даже если это работает, ваше решение неверно. Комбо-боксы позволяют вводить значения, отличные от тех, что указаны в предопределенном списке. Единственным реальным результатом комбинированного списка является текстовая метка. Я думаю, что иметь отдельное «значение» Comboitem не очень хорошая идея.
Используйте setText () в Combobox или, если вы хотите ограничить выбор предварительно определенным списком, используйте Listbox.

...