我有一个由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>
答案 0 :(得分:0)
如此有效(在代码中无法看到它,因为它不是mcve)
然后简单的推论就是选择&#39;在按下创建按钮(#{distritoController.prepareCreate}
)
<强>解决方案:强>
清除变量(例如,通过创建对象的新空实例...
实际上,这不是PrimeFaces的问题(普通的jsf也会发生这种情况),而且它不是一个&#39; java&#39;问题或者只是一个简单的编码问题。