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
Jsf RequestScope bean和Prime Faces收集器_Jsf_Primefaces - Fatal编程技术网

Jsf RequestScope bean和Prime Faces收集器

Jsf RequestScope bean和Prime Faces收集器,jsf,primefaces,Jsf,Primefaces,我有个问题。我有一个bean CreateProjectBean,它是RequestScope bean。我想使用名为Collector的Prime Faces组件,以便动态地更改视图createProject表groupRoleAdapters,它是CreateProjectBean的一个字段。不幸的是,每次我在收集器中单击“添加”或“删除”时,都会有一个新的请求被发送到bean,这意味着GroupRoleAdapters再次被创建——当然是空的 我的收集器代码: <p:panel he

我有个问题。我有一个bean CreateProjectBean,它是RequestScope bean。我想使用名为Collector的Prime Faces组件,以便动态地更改视图createProject表groupRoleAdapters,它是CreateProjectBean的一个字段。不幸的是,每次我在收集器中单击“添加”或“删除”时,都会有一个新的请求被发送到bean,这意味着GroupRoleAdapters再次被创建——当然是空的

我的收集器代码:

<p:panel header="Add group">
    <h:panelGrid columns="2">
        <h:outputLabel value="Group name: *" for="txt_title"></h:outputLabel>

        <h:selectOneMenu id="groupMenu"
            value="#{createProjectBean.groupRoleAdapter.groupName}">
            <f:selectItems value="#{createProjectBean.groupNames}"
                var="group" itemValue="#{group}" itemLabel="#{group}" />
        </h:selectOneMenu>


        <f:verbatim>
            <br />
        </f:verbatim>

        <h:message styleClass="errorMessage" for="creationForm:groupMenu" />

        <h:outputLabel value="Role name: *" for="txt_title"></h:outputLabel>

        <h:selectOneMenu id="roleMenu"
            value="#{createProjectBean.groupRoleAdapter.roleName}">
            <f:selectItems value="#{createProjectBean.roleNames}" var="role"
                itemValue="#{role}" itemLabel="#{role}" />
        </h:selectOneMenu>

        <f:verbatim>
            <br />
        </f:verbatim>


        <h:message styleClass="errorMessage" for="creationForm:roleMenu" />

        <f:verbatim>
            <br />
        </f:verbatim>


        <p:commandButton value="Add" update="creationForm:out"
            action="#{createProjectBean.reinit}">
            <p:collector value="#{createProjectBean.groupRoleAdapter}"
                addTo="#{createProjectBean.selectedGroupRoleAdapters}"/>
        </p:commandButton>
    </h:panelGrid>
</p:panel>

<f:verbatim>
    <br />
</f:verbatim>

<p:outputPanel id="out">
    <p:dataTable value="#{createProjectBean.selectedGroupRoleAdapters}"
        var="groupRoleAdapter">


        <p:column>
            <f:facet name="header">
                <h:outputText value="Name" />
            </f:facet>
            <h:outputText value="#{groupRoleAdapter.groupName}" />
        </p:column>

        <p:column>
            <f:facet name="header">
                <h:outputText value="Role" />
            </f:facet>
            <h:outputText value="#{groupRoleAdapter.roleName}" />

        </p:column>

        <p:column>
            <f:facet name="header">
                <h:outputText value="Operation" />
            </f:facet>
            <p:commandLink value="Remove" update="creationForm:out">
                <p:collector value="#{groupRoleAdapter}" removeFrom="#{createProjectBean.selectedGroupRoleAdapters}" />
            </p:commandLink>
        </p:column>

    </p:dataTable>
</p:outputPanel>





我希望在从列表selectedGroupRoleAdapters(由收集器表表示)中添加和删除groupRoleAdapters时使用相同的bean实例,但每次尝试创建新项目时都要创建新的bean实例,因此将范围更改为sessionScope不是我能接受的

提前感谢您的帮助

我附上该视图的完整代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:composition template="/templates/template.xhtml">
    <ui:define name="head">
        <title>Create Project</title>
        <link rel="stylesheet" type="text/css"
            href="#{facesContext.externalContext.requestContextPath}/styles/style.css" />
    </ui:define>
    <ui:define name="content">
        <div class="mainTable">
        <center><f:view>
            <h:outputText id="error" rendered="false" />
            <h:message styleClass="errorMessage" for="error" />
            <h:form id="creationForm">
                <h:panelGrid columns="2" width="420">

                    <h:panelGroup width="300">
                        <h:outputLabel styleClass="formLabel" value="Name: "></h:outputLabel>
                    </h:panelGroup>

                    <h:panelGroup>
                        <h:inputText styleClass="formField" id="name"
                            value="#{createProjectBean.project.name}" required="true">
                            <f:validateLength minimum="3" />
                        </h:inputText>
                    </h:panelGroup>

                    <f:verbatim>
                        <br />
                    </f:verbatim>

                    <h:message styleClass="errorMessage" for="creationForm:name" />

                    <h:panelGroup>
                        <h:outputLabel styleClass="formLabel" value="Short Name: " />
                    </h:panelGroup>

                    <h:panelGroup>
                        <h:inputText styleClass="formField" id="shortname"
                            value="#{createProjectBean.project.shortname}" required="false">
                            <f:validateLength maximum="8" />
                        </h:inputText>
                    </h:panelGroup>

                    <f:verbatim>
                        <br />
                    </f:verbatim>

                    <h:message styleClass="errorMessage" for="creationForm:shortname" />

                    <h:panelGroup>
                        <h:outputLabel styleClass="formLabel" value="Homepage: " />
                    </h:panelGroup>

                    <h:panelGroup>
                        <h:inputText styleClass="formField" id="homepage"
                            value="#{createProjectBean.project.homepage}" required="false">
                        </h:inputText>
                    </h:panelGroup>

                    <f:verbatim>
                        <br />
                    </f:verbatim>

                    <h:message styleClass="errorMessage" for="creationForm:hostname" />

                    <h:panelGroup>
                        <h:outputLabel styleClass="formLabel" value="Description: " />
                    </h:panelGroup>

                    <h:panelGroup>
                        <h:inputTextarea styleClass="formField" id="description"
                            value="#{createProjectBean.project.description}" required="false"
                            cols="50" rows="10" />
                    </h:panelGroup>

                    <f:verbatim>
                        <br />
                    </f:verbatim>

                    <h:message styleClass="errorMessage" for="creationForm:description" />

                    <h:panelGroup>
                        <h:outputLabel styleClass="formLabel" value="Plugins: " />
                    </h:panelGroup>

                    <h:selectManyListbox id="pluginBox"
                        value="#{createProjectBean.selectedPluginNames}">
                        <f:selectItems value="#{createProjectBean.pluginNames}"
                            var="plugin" itemValue="#{plugin}" itemLabel="#{plugin}" />
                    </h:selectManyListbox>

                    <f:verbatim>
                        <br />
                    </f:verbatim>

                    <h:message styleClass="errorMessage" for="creationForm:pluginBox" />

                    <h:panelGroup>
                        <h:outputLabel styleClass="formLabel" value="Tags: " />
                    </h:panelGroup>

                    <h:selectManyListbox id="tagBox"
                        value="#{createProjectBean.project.tags}">
                        <f:selectItems value="#{createProjectBean.allTags}" var="tag"
                            itemValue="#{tag}" itemLabel="#{tag.name}" />
                    </h:selectManyListbox>

                    <f:verbatim>
                        <br />
                    </f:verbatim>

                    <h:message styleClass="errorMessage" for="creationForm:tagBox" />

                    <f:verbatim>
                        <br />
                    </f:verbatim>

                    <p:panel header="Add group">
                        <h:panelGrid columns="2">
                            <h:outputLabel value="Group name: *" for="txt_title"></h:outputLabel>

                            <h:selectOneMenu id="groupMenu"
                                value="#{createProjectBean.groupRoleAdapter.groupName}">
                                <f:selectItems value="#{createProjectBean.groupNames}"
                                    var="group" itemValue="#{group}" itemLabel="#{group}" />
                            </h:selectOneMenu>

                            <f:verbatim>
                                <br />
                            </f:verbatim>

                            <h:message styleClass="errorMessage" for="creationForm:groupMenu" />

                            <h:outputLabel value="Role name: *" for="txt_title"></h:outputLabel>

                            <h:selectOneMenu id="roleMenu"
                                value="#{createProjectBean.groupRoleAdapter.roleName}">
                                <f:selectItems value="#{createProjectBean.roleNames}" var="role"
                                    itemValue="#{role}" itemLabel="#{role}" />
                            </h:selectOneMenu>

                            <f:verbatim>
                                <br />
                            </f:verbatim>

                            <h:message styleClass="errorMessage" for="creationForm:roleMenu" />

                            <f:verbatim>
                                <br />
                            </f:verbatim>


                            <p:commandButton value="Add" update="creationForm:out"
                                action="#{createProjectBean.reinit}">
                                <p:collector value="#{createProjectBean.groupRoleAdapter}"
                                    addTo="#{createProjectBean.selectedGroupRoleAdapters}"/>
                            </p:commandButton>
                        </h:panelGrid>
                    </p:panel>

                    <f:verbatim>
                        <br />
                    </f:verbatim>

                    <p:outputPanel id="out">
                        <p:dataTable value="#{createProjectBean.selectedGroupRoleAdapters}"
                            var="groupRoleAdapter">


                            <p:column>
                                <f:facet name="header">
                                    <h:outputText value="Name" />
                                </f:facet>
                                <h:outputText value="#{groupRoleAdapter.groupName}" />
                            </p:column>

                            <p:column>
                                <f:facet name="header">
                                    <h:outputText value="Role" />
                                </f:facet>
                                <h:outputText value="#{groupRoleAdapter.roleName}" />

                            </p:column>

                            <p:column>
                                <f:facet name="header">
                                    <h:outputText value="Operation" />
                                </f:facet>
                                <p:commandLink value="Remove" update="creationForm:out">
                                    <p:collector value="#{groupRoleAdapter}"
                                        removeFrom="#{createProjectBean.selectedGroupRoleAdapters}" />
                                </p:commandLink>
                            </p:column>

                        </p:dataTable>
                    </p:outputPanel>

                    <f:verbatim>
                        <br />
                    </f:verbatim>

                    <h:commandButton value="Create" styleClass="formButton"
                        action="#{createProjectBean.create}" />
                </h:panelGrid>
            </h:form>
        </f:view></center>
        </div>
    </ui:define>
</ui:composition>
</html>

创建项目













如果您已经使用了JSF2.0,只需通过注释或
faces config.xml中的
视图将bean放入
视图
范围即可

如果您仍然使用JSF 1.x(我担心,因为您使用的是那些难看的JSF 1.0/1.1-mandatory
标记),那么您必须将bean放入
会话
范围,最终结合一个唯一的请求范围参数,该参数由
h:inputHidden
f:param
在后续请求中保留,或者获取一个第三方库,其中包含一个组件,该组件能够为后续请求保存整个
请求的状态
作用域bean,比如。

事实上,我使用的是JSF 2.0,刚刚从1.x迁移过来。我尝试将bean设置为viewscope,但其行为与请求范围中的行为相同。我只能向收集器列表中添加一个适配器,当我尝试添加另一个适配器时,第一个适配器就消失了。它在会话范围内行为正常,但我有理由不能使用它。我将尝试针对旧JSF的解决方案,但我怀疑我的主管是否会同意使用一些新的库。技术是严格规定的。无论如何