Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不处理p:treeTable中的h:inputText的值_Java_Jsf_Primefaces - Fatal编程技术网

Java 不处理p:treeTable中的h:inputText的值

Java 不处理p:treeTable中的h:inputText的值,java,jsf,primefaces,Java,Jsf,Primefaces,我想处理此表单(valueChangueListener在实际情况下无效) 这是后台bean: @Component @Scope("request") public class TestBean extends PrivateBaseBean implements Serializable { protected static final Logger logger = Utils.loggerForThisClass(); private TreeNode root; @PostConst

我想处理此表单(valueChangueListener在实际情况下无效)

这是后台bean:

@Component
@Scope("request")
public class TestBean extends PrivateBaseBean implements Serializable {
protected static final Logger logger = Utils.loggerForThisClass();
private TreeNode root;

@PostConstruct
public void init() {
    root = new DefaultTreeNode("root", null);

    TreeNode child1 = new DefaultTreeNode(new Element("Total"), root);

    new DefaultTreeNode(new Element("Office"), child1);

}

public void saveAction() {

    StringBuilder textToShowInMessage = new StringBuilder();
    for (TreeNode children : root.getChildren()) {
        logger.debug(((Element) children.getData()).getName() + "->"
                + ((Element) children.getData()).getValue());
        for (TreeNode leaf : children.getChildren()) {
            logger.debug(((Element) leaf.getData()).getName() + "->"
                    + ((Element) leaf.getData()).getValue());
        }
    }

}

public TreeNode getRoot() {
    return root;
}

public void setRoot(TreeNode root) {
    this.root = root;
}
元素模型:

public class Element {

private String name;
private String value;

public Element(String name) {
    super();
    this.name = name;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}
最后,有人认为:

<h:form>

    <p:treeTable value="#{testBean.root}" var="element">

        <p:column>
            <f:facet name="header">
                        Name
                    </f:facet>
                    #{element.name}
                </p:column>

        <p:column>
            <f:facet name="header">
                        Value
                    </f:facet>
            <h:inputText value="#{element.value}" />
        </p:column>
    </p:treeTable>
    <p:commandButton value="#{msg.save}" action="#{testBean.saveAction}"
        process="@all" icon="ui-icon-disk" update="@form" />
</h:form>
我不知道如何处理所有树值…

一个解决方案是:

1.让我们用树和元素对象创建会话对象数组:

@Component
@Scope("session")
public class SessionObject {
private Object[] root;

public Object[] getRoot() {
    return root;
}

public void setRoot(Object[] root) {
    this.root = root;
}

}
2.注入TestBean:

@Autowired
private SessionObject sessionObject;
3.在init()方法中,我们必须在会话中保存所有内容:

Object[] array = new Object[] { root, element, element2 };
    sessionObject.setRoot(array);
4.最后,在saveAction()中,我们可以使用新值恢复元素:

for (TreeNode children : ((DefaultTreeNode) ((Object[]) sessionObject
            .getRoot())[0]).getChildren()) {
....
会话中的每个元素都是必需的:

Object[] array = new Object[] { root, element, element2 };
    sessionObject.setRoot(array);
后座:

@Component
@Scope("request")
public class TestBean extends PrivateBaseBean implements Serializable {
@Autowired
private SessionObject sessionObject;
protected static final Logger logger = Utils.loggerForThisClass();
private TreeNode child1;
private Element element;
private Element element2;

@PostConstruct
public void init() {
    sessionObject = new SessionObject();
    element = new Element("Total");
    element2 = new Element("Oficina");

    TreeNode root = new DefaultTreeNode("root", null);

    child1 = new DefaultTreeNode(element, root);

    new DefaultTreeNode(element2, root);
    Object[] array = new Object[] { root, element, element2 };
    sessionObject.setRoot(array);
}

public void saveAction() {
    for (TreeNode children : ((DefaultTreeNode) ((Object[]) sessionObject
            .getRoot())[0]).getChildren()) {
        logger.debug(((Element) children.getData()).getName() + "->"
                + ((Element) children.getData()).getValue());
        for (TreeNode leaf : children.getChildren()) {
            logger.debug(((Element) leaf.getData()).getName() + "->"
                    + ((Element) leaf.getData()).getValue());
        }
    }

}

public TreeNode getRoot() {
    return ((DefaultTreeNode) ((Object[]) sessionObject.getRoot())[0]);
}

public void setRoot(TreeNode root) {
    Object[] array = new Object[] { root, element, element2 };
    sessionObject.setRoot(array);
}
}
现在输出:

DEBUG: com.smf.web.jsf.bean.TestBean - Total->1231231231
DEBUG: com.smf.web.jsf.bean.TestBean - Office->null
DEBUG: com.smf.web.jsf.bean.TestBean - Total->TotalValue
DEBUG: com.smf.web.jsf.bean.TestBean - Oficina->OfficeValue
有关更多详细信息,请在此询问。

我也有同样的问题,此解决方案是否适用于此?