【问题标题】:null pointer in a primefaces dataTableprimefaces数据表中的空指针
【发布时间】:2014-11-05 16:58:38
【问题描述】:

我有一个 p:dataTable,当我试图获取它时,选择的值抛出空指针,这种情况是在将数据表放入模态 p:dialog 之后,但如果删除模态属性可以正常工作。 PD:模态 p:dialog 像这个问题一样隐藏在覆盖层之后

Primefaces - AjaxStatus - Dialog is behind the overlay

答案对我不起作用,因为我使用的是 primefaces 5.1,所以我必须使用 appendTo="@(body)"

我不知道这对我的问题是否重要。

继续:如果 p:dialog 是模态的,则空指针存在。

这是我的代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     "http://www.w3.org/TR/html4/loose.dtd">
<ui:composition template="/resources/sysged.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">


<ui:define name="vDoc">
    <h:form id="form">
        <p:panel header="Document">


            <h:panelGrid columns="4">
                <p:commandButton id="prev"
                    actionListener="#{DocumentController.priviousPage()}"
                    icon="ui-icon-circle-triangle-w" update="docImage next prev"
                    disabled="#{DocumentController.inicioLista}" />
                <p:commandButton id="next"
                    actionListener="#{DocumentController.nextPage()}"
                    icon="ui-icon-circle-triangle-e" update="docImage prev next"
                    disabled="#{DocumentController.finalLista}" />

                <p:commandButton id="anotacoes" value="Anotaçoes"
                    onclick="PF('dialogAnotacao').show();" />
                <p:button id="voltar" outcome="pesquisaDocumento.xhtml"
                    value="Voltar" />


            </h:panelGrid>

        </p:panel>



    </h:form>

    <h:form id="panotation">

        <p:dialog id="dialogAnotacao" closeOnEscape="true" header="Anotaçoes"
            widgetVar="dialogAnotacao" modal="true" resizable="false"
            appendTo="@(body)" draggable="true">


            <p:dataTable id="tanotation" var="anotation"
                value="#{DocumentController.arquivo.anotacaoList}"
                selectionMode="single"
                selection="#{DocumentController.selected}"
                rowKey="#{anotation.i}">



                <p:column headerText="Indice" style="text-align:left">
                    <h:outputText value="#{anotation.i}" />
                </p:column>
                <p:column headerText="text" style="text-align:left">
                    <h:outputText value="#{anotation.text}" />
                </p:column>

            </p:dataTable>

            <p:contextMenu for="tanotation">
                <p:menuitem value="do" update="tanotation"
                    icon="ui-icon-close" actionListener="#{DocumentController.doit}">
                </p:menuitem>
            </p:contextMenu>


        </p:dialog>

    </h:form>

</ui:define>
</ui:composition>

我在 managedBean 中的方法

public void doit() {

    System.out.println(selected);

}

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

    您将 &lt;p:dialog&gt; 附加到 html 页面的正文(请参阅 appendTo 属性),因此它不包含在任何 &lt;h:form&gt; 中。

    这可能是您的&lt;p:dataTable&gt; 的问题

    你能把你的&lt;h:form id="panotation"&gt; 放在你的&lt;p:dialog&gt; 里面而不是外面吗?

    【讨论】:

    • 非常感谢,我刚刚更改了表单位置并正常工作
    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多