gpt4 book ai didi

java - 组合框对 ".setValue()"和 ".select()"没有反应

转载 作者:行者123 更新时间:2023-11-30 08:48:24 24 4
gpt4 key购买 nike

这是我的代码:

comboBoxInstance.setInputPrompt("Something...");
comboBoxInstance.setNullSelectionAllowed(false);
Cookie comboCookie = getCookieByName("combo");
comboBoxInstance.select((comboCookie != null) ? comboCookie.getValue() : null);

final TextField textFieldInstance = new TextField("Textfield");
textFieldInstance.setInputPrompt("Something...");
Cookie tfCookie = getCookieByName("tf");
textFieldInstance.setValue((tfCookie != null) ? tfCookie.getValue() : null);

问题是文本字段与“Cookie 设置”配合得很好。只有组合框拒绝按应有的方式工作。

输出是这样的:

enter image description here

我尝试使用 .setValue() 而不是 .select() 但这具有几乎相同的效果。我还确保提供了 Cookie 本身和正确的值。

查看生成 cookie 的部分可能会有所帮助:

Cookie comboCookie = new Cookie("combo", comboBoxInstance.getValue().toString());
cookieProcessing(costcentreCookie); //<- sets maxage and vaadin related stuff (like adding the cookie)

编辑:

关于数据流的几点。

我正在生成一个带有 SimpleJDBCConnectionPool 的 SQLContainer 作为数据容器(来自 TableQuery)的 ComboBox。这是组合框类中的初始化(在构造函数中执行):

private void init() throws SQLException {
this.setContainerDataSource(generateContainer());
this.setItemCaptionPropertyId("something");
}

私有(private)方法 generateContainer() 当然会返回 SQLContainer。

如果我单击打开对话框的特定按钮,就会发生这种情况。这个对话框就是上图所示的片段。组合框 - 当然 - 是其中的一部分。

现在应该做的是设置他的数据(获取 ComboBox 的一项)并点击保存。保存按钮执行存储 cookie 的例程。就是上面已经提到的代码(Cookie comboCookie = new Cookie(...)。

好的,现在用户将再次打开对话框。他是重新加载应用程序还是重新打开对话框(或做其他事情)并不重要。它在应用程序中基本相同。

对话框打开并再次初始化组合框(和文本字段)。然而,这次它应该从存储的 cookie 中收集数据。这是问题发生的地方。这适用于文本字段(有两个,但出于缩短的原因我省略了一个)但不适用于组合框,即使它应该具有与以前完全相同的数据。请记住,它是与我们最初存储 cookie 时完全相同的类,具有完全相同的初始化。

我有一个模糊的假设,它必须根据代码的堆叠方式做一些事情。也许它在尝试设置合适的值时还没有完成加载数据容器,然后找不到。


编辑2:

我终于设法揭示了一些东西。当执行“.select()”时,ComboBox 确实是空的。但是,这意味着 ComboBox 保持不变(它只是一种“链接”到数据容器),直到有人放下项目。一旦发生这种情况,项目就在那里,我可以选择它们。

它应该像这样工作吗? O.o 我可以在做其他事情之前完全初始化组合框吗?像这样的东西:

private void init() throws SQLException {
this.setContainerDataSource(generateContainer());
this.setItemCaptionPropertyId("something");
this.gatherTheItems();
}

Edit3 - 使用“.setImmediate(true)”进行测试

我已将 init 更改为:

private void init() throws SQLException {
this.setContainerDataSource(generateContainer());
this.setItemCaptionPropertyId("SOMETHING");
this.setImmediate(true);
}

这并没有改变任何东西。组合框仍然是空的:

empty even with immediate set

最佳答案

终于!起初我找到了这样的解决方法:

    for (Iterator it_IDS = combobox.getItemIds().iterator(); it_IDS.hasNext();) {
Object id = (Object) it_IDS.next();
if(id.toString().equals(cookie.getValue().toString())){
combo2.select(id);
break;
}
}

但是,我不敢相信这是有效的,因为它并没有改变任何核心问题。所以我已经调查过,RowID 是通过 BigDecimal 和 voilà 构建的:

    if(cookie != null) {
combobox.select(new RowId(new BigDecimal(cookie.getValue())));
}

我现在很开心 :) 感谢您的耐心等待 kukis。

关于java - 组合框对 ".setValue()"和 ".select()"没有反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31967198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com