HashMap меняет значения самостоятельно - PullRequest
0 голосов
/ 17 июня 2019

Я работаю с 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>

1 Ответ

0 голосов
/ 17 июня 2019

Я решил свою проблему, заменив crAttr внутри treeBean следующим методом

public void generateAtt(TreeNode node) {

        for (Attribute a : aList) {
            if (a.getName().equals(newNode.toString()))
                this.a = a;
        }

    }

, а затем изменить создать createNodeTRel

public void createNodeTRel() {

        TreeNode childNode = new DefaultTreeNode(newNode, null);
        recursiveTree(newNode, childNode);
        recursiveTree(newNode, selectedNode);
        generateAtt(newNode);

        newNode = null;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...