如何使用Netbeans和Primefaces在JSF应用程序中创建一个空页面?

时间:2018-05-01 18:11:25

标签: jsf primefaces xhtml

我有一个由JSF使用Netbeans中的Primefaces模板创建的应用程序。 其中一个页面是Create.xhtml,用于在mysql数据库中插入新记录。此页面由List od记录的页脚中的按钮调用。 当我选择此页面时,表单为空,只有标题和按钮的问题。 outputLabel和inputText是"隐藏" (在浏览器中检查页面)。但是,如果我首先在List中选择一条记录,然后在Create页面中选择outputLabel和inputText已经可见,但是有值。 我希望当我选择Create页面时,这是一个空表单,当我想在数据库中插入我想要的值时。 List.xhtml的代码:

<h:form id="DistritoCreateForm">
    <p:panel header="#{bundle.CreateDistritoTitle}">
    <h:panelGroup id="display">
        <p:panelGrid columns="2" rendered="#{distritoController.selected != null}">
            <p:outputLabel value="#{bundle.CreateDistritoLabel_nomeDistrito}" for="nomeDistrito" />
            <p:inputText id="nomeDistrito" value="#{distritoController.selected.nomeDistrito}" title="#{bundle.CreateDistritoTitle_nomeDistrito}" required = "true" />
        </p:panelGrid>
        <p:commandButton actionListener="#{distritoController.create}" value="#{bundle.Save}" update="display,:growl" oncomplete="handleSubmit(args,'DistritoCreateForm');" action="List.xhtml"/>
        <p:commandButton value="#{bundle.Cancel}" action="List.xhtml"/>
    </h:panelGroup>
    </p:panel>
</h:form>

Create.xhtml的代码:

<h:form id="DistritoListForm">
    <p:panel header="#{bundle.ListDistritoTitle}">
        <p:dataTable id="datalist" value="#{distritoController.items}" var="item" style="width:50%;"
                     selectionMode="single" selection="#{distritoController.selected}"
                     paginator="true"
                     paginatorPosition="bottom"
                     rowKey="#{item.id}"
                     rows="10">

            <p:ajax event="rowSelect"   update="createButton viewButton editButton deleteButton"/>

            <p:column filterBy="#{item.nomeDistrito}" filterMatchMode="contains">
                <f:facet name="header">
                    <h:outputText value="#{bundle.ListDistritoTitle_nomeDistrito}"/>
                </f:facet>
                <h:outputText value="#{item.nomeDistrito}"/>
            </p:column>
            <f:facet name="footer">
                <p:commandButton id="createButton" icon="ui-icon-plus" actionListener="#{distritoController.prepareCreate}" action="Create.xhtml"/>
                <p:commandButton id="viewButton"   icon="ui-icon-search" action="View.xhtml"/>
                <p:commandButton id="editButton"   icon="ui-icon-pencil" action="Edit.xhtml"/>
                <p:commandButton id="deleteButton" icon="ui-icon-trash" actionListener="#{distritoController.destroy}" update=":growl,datalist" disabled="#{empty distritoController.selected}"/>
            </f:facet>
        </p:dataTable>
    </p:panel>
</h:form>

1 个答案:

答案 0 :(得分:0)

如此有效(在代码中无法看到它,因为它不是mcve

  • 您选择了一些内容
  • 因此,某个变量设置为在共享&#39;显示&#39;编辑&#39;创建&#39;中使用。页/对话框
  • 接下来按下创建按钮,显示相同的页面/对话框,其中包含之前选择的内容。

然后简单的推论就是选择&#39;在按下创建按钮(#{distritoController.prepareCreate}

时调用的方法中不清除变量

<强>解决方案:

清除变量(例如,通过创建对象的新空实例...

实际上,这不是PrimeFaces的问题(普通的jsf也会发生这种情况),而且它不是一个&#39; java&#39;问题或者只是一个简单的编码问题。