pickList dualList 对象在加载时变为空。
这是选择列表定义
<p:pickList id="queuesPickList"
value="#{manageApplications.dualListQueuesToBeAddedToTheApplication}"
var="queueToAdd" itemLabel="#{queueToAdd}" itemValue="#{queueToAdd}">
</p:pickList>
正在使用的 dualList 对象由两个字符串列表组成
private List<String> queuesSouce = new ArrayList<>();
private List<String> queuesTarget = new ArrayList<>();
private DualListModel<String> dualListQueuesToBeAddedToTheApplication;
直到这一部分,一切看起来都不错。源对象和目标对象加载成功,并且选择列表起作用。创建 dualList 后,我立即列出了 source 和 target 的内容,它们都在那里。
下方有一个按钮,用于保存通过调用 actionListener 所做的更改。
<p:commandButton value="SAVE" id="saveQueuesButton"
actionListener="#{manageApplications.saveQueuesToTheApplication()}"
oncomplete="PF('dlgAddQueuesToApplication').hide();"
update="addQueuesToApplicationPanel">
</p:commandButton>
现在的 actionListener 只是打印 dualList 对象的值。
public void saveQueuesToTheApplication() {
System.out.println(this.dualListQueuesToBeAddedToTheApplication.getTarget());
}
Now both, .target() and .souce() are empty. There are zero object in there.
阅读 Primefaces 文档,它说需要转换器来处理您自己的类型。由于我使用的是普通字符串列表,它是 pickList 组件的 native 对象,所以我没有费心构建转换器类。
我做错了什么?
最好的问候, 尼奥沙姆
最佳答案
代码没有问题。该问题与范围有关。
pickList 正在模态对话框窗口 中使用,不知何故这并没有反射(reflect)对 dualList 组件的更改。
我已经从对话框窗口中删除了组件并添加到 <h:panelGroup>
仅在需要时使用 rendered=#{booleanCondition}
呈现.
我无法准确解释使用模态对话框窗口时有哪些限制,但它阻止了组件更新变量。
希望这对面临同样问题的其他人有所帮助!
关于Primefaces 选择列表 dualList 对象变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42596545/