Я работаю с JSF, и у меня есть некоторые проблемы в bean-компоненте.Когда я нажимаю кнопку Fine
, я ожидаю вызова dataTreeBean.addAttributo
.Проблема в том, что он работает правильно только при первом вызове.Предположим, я передал в качестве параметров (key1, v1)
, они правильно вставлены в attributes
.Когда я снова нажимаю кнопку Fine
, и параметры (key2, v2)
, я нахожу (key1, v2)
вместо (key1, v1)
в attributes
до запуска метода, и у меня (key1, v2)(key2, v2)
после запуска метода. Я могуЯ не знаю, что происходит, и я не знаю, как значения в attributes
изменяются до запуска метода.
treeBean.java
private Attribute a;
private ArrayList<TreeNode> listaClassi;
private TreeNode newNode;
private TreeNode selectedNode;
public void createNodeT() {
TreeNode childNode = new DefaultTreeNode(newNode, null);
recursiveTree(newNode, childNode);
recursiveTree2(newNode, selectedNode);
crAtt(newNode);
newNode = null;
}
public void recursiveTree(TreeNode node, TreeNode c) {
List<TreeNode> children = node.getChildren();
Attribute a = new Attribute();
// if (node.getChildCount() > 0) {
a.setName(node.toString());
a.setDistinguishing(distinguishing);
a.setMandatory(mandatory);
a.setDisplay(display);
a.setDataType("Taxonomy");
a.setSubClasses(node);
aList.add(a);
for (int j = 0; j < node.getChildCount(); j++) {
TreeNode childNode = new DefaultTreeNode(children.get(j), c);
listaClassi.add(children.get(j));
recursiveTree(children.get(j), childNode);
}
}
public void crAtt(TreeNode node) {
a.setName(node.toString());
a.setDistinguishing(distinguishing);
a.setMandatory(mandatory);
a.setDisplay(display);
a.setDataType("Taxonomy");
a.setSubClasses(node);
}
public ArrayList<TreeNode> getListaClassi() {
return listaClassi;
}
public Attribute getA() {
return a; }
dataTreeBean.java:
private HashMap<String, ArrayList<Attribute>> attributes;
private String classe;
private String option;
public void addAttributo(String key, Attribute att) {
if (attributes.get(key) == null) {
ArrayList<Attribute> a = new ArrayList<Attribute>();
a.add(att);
attributes.put(key, a);
} else {
ArrayList<Attribute> a = attributes.get(key);
a.add(att);
attributes.put(key, a);
}
int i = 0;
}
public String getClasse() {
return classe;
}
public void setOption(String option) {
this.option = option;
}
file.xhtml
<p:commandButton value="Fine" styleClass="ui-confirmdialog-yes"
action="#{dataTreeBean.addClassi(treeBean.getListaClassi())}"
update=":formData:selected_data_property :br:sel_range aggiungiAttTaxonomy :formClassi:selected_class"
oncomplete="PF('addTaxonomy').hide();"
actionListener="#{dataTreeBean.setOption('Taxonomy')}">
<f:actionListener binding="#{treeBean.createNodeT()}" />
<f:actionListener
binding="#{dataTreeBean.addAttributo(dataTreeBean.getClasse(),treeBean.getA())}" />
</p:commandButton>