Jsf ManagedBean没有';t声明公共无参数构造函数

Jsf ManagedBean没有';t声明公共无参数构造函数,jsf,constructor,managed-bean,Jsf,Constructor,Managed Bean,我正在使用PrimeFaces 5.0,希望在单击事件后在弹出框中创建,但它显示以下错误 无法创建托管beanpoputreetablemanagedbean。以下 发现问题:-托管bean类 bean.popupreetablemanagedbean用于托管bean popupTreeTableManagedBean不声明公共无参数 构造师托管bean类bean.poputreetablemanagedbeanfor 托管beanpoputreetablemanagedbean不声明公共 没有

我正在使用PrimeFaces 5.0,希望在单击事件后在弹出框中创建
,但它显示以下错误

无法创建托管bean
poputreetablemanagedbean
。以下 发现问题:-托管bean类
bean.popupreetablemanagedbean
用于托管bean
popupTreeTableManagedBean
不声明公共无参数 构造师托管bean类
bean.poputreetablemanagedbean
for 托管bean
poputreetablemanagedbean
不声明公共 没有参数构造函数

下面是我的代码片段

index.xhtml:

<p:dialog header="" widgetVar="dlg1" minHeight="200">
    <p:treeTable value="#{popupTreeTableManagedBean.root}" var="node" style="" >
        <p:column>
            <f:facet name="header">Name</f:facet>
            <h:outputText value="#{node.name}"></h:outputText>
        </p:column>

        <p:column>
            <f:facet name="header">Value</f:facet>
            <h:inputText value="#{node.value}" style="border-style: hidden;"/>
        </p:column>
    </p:treeTable>
</p:dialog>

名称
价值
PopupTreeTableManagedBean.java

@ManagedBean
@SessionScoped
public class PopupTreeTableManagedBean {

    private TreeNode root = new DefaultTreeNode("Root Node", null);
    List<String> selectedParams;
    TreeNode scanParamsRoot = null;

    PopupTreeTableManagedBean() {
        selectedParams = GenrateScanList.getParamList();
        createRootAndLeafNodes();
    }

    private TreeNode createRootAndLeafNodes() {
        TreeNode scanSubRoot = null;
        int size = selectedParams.size();
        TreeNode scanRoot = new DefaultTreeNode(new Document("scanParams", ""), this.root);
        scanSubRoot = new DefaultTreeNode(new Document("Sub Root", ""), scanRoot);

        Document relationshipValue = new Document("Hi", "");
        TreeNode documentss06 = new DefaultTreeNode(relationshipValue, scanSubRoot);
        return root;
    }

    private DefaultTreeNode getTreeNodeObject() {
        return new DefaultTreeNode();
    }

    private Document getDocumentObject() {
        return new Document(null, null);
    }

    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }
}
@ManagedBean
@会议范围
公共类PopupTreeTableManagedBean{
private TreeNode root=新的DefaultTreeNode(“根节点”,null);
列出所选参数;
TreeNode scanParamsRoot=null;
PopupTreeTableManagedBean(){
selectedParams=GenrateScanList.getParamList();
createRootAndLeafNodes();
}
私有树节点createRootAndLeafNodes(){
TreeNode scanSubRoot=null;
int size=selectedParams.size();
TreeNode scanRoot=新的DefaultTreeNode(新文档(“scanParams”),this.root);
scanSubRoot=新的DefaultTreeNode(新文档(“子根”),scanRoot;
Document relationshipValue=新文档(“Hi”,即“”);
TreeNode documentss06=新的默认TreeNode(relationshipValue,scanSubRoot);
返回根;
}
私有DefaultTreeNode getTreeNodeObject(){
返回新的DefaultTreeNode();
}
私有文档getDocumentObject(){
返回新单据(空、空);
}
公共树节点getRoot(){
返回根;
}
public void setRoot(TreeNode root){
this.root=根;
}
}

错误消息说您需要一个
公共的
构造函数,但是您的构造函数是包私有的。添加
public
关键字应该会有帮助。

错误消息的哪一部分您不理解?此外,此构造函数应替换为
@PostConstruct
方法。bean构造函数中的初始化是完全合法的,除非它不依赖于依赖项注入。