我无法以编程方式设置组合框的值,有人可以告诉我代码中缺少什么
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没有影响。例如,语言环境设置为默认的保加利亚语,我需要将其设置为英语。
答案 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版本升级到最新版本。我没有问题。