zk以编程方式选择组合框项目

时间:2010-03-21 17:22:58

标签: hibernate spring zk

我无法以编程方式设置组合框的值,有人可以告诉我代码中缺少什么

 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()”确实返回正确的选定项目,但似乎对UI没有影响。例如,语言环境设置为默认的保加利亚语,我需要将其设置为英语。

2 个答案:

答案 0 :(得分:0)

我认为这是您的ZK版本中的错误。您可以尝试使用setSelectedItemApi或setSelectedItemIndex而不是setSelectedItem。

另一方面,即使它有效,您的解决方案也是不对的。组合框允许输入与预定义列表中的值不同的值。组合框的唯一真正结果是文本标签。我认为对Comboitem有一个独立的“价值”并不是一个好主意 在Combobox上使用setText(),或者如果要将选项限制为预定义列表,请使用Listbox。

答案 1 :(得分:0)

只要查看你的代码,除了Miklos指出的内容之外我还能看到一些错误。

您正在使用基于Java的作曲家的getfellow。但是,您不应该这样做,因为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());
    }
}

有关详细信息,请参阅documentation

对于检索所选项目的功能,为什么不使用Combobox的 getSelectedItem ?即使您使用像Miklos建议的Listbox,您也可以使用相同的功能。

关于设置所选项目,您需要将ZK版本升级到最新版本。我没有问题。