<p:columns>中的JSF <p:selectonemenu>

时间:2016-06-27 20:26:00

标签: java jsf jsf-2 primefaces

这个问题发生在index.html中,我使用的值中的var是错的吗?

问题的原因:

  

16:47:19,428严重[javax.enterprise.resource.webcontainer.jsf.context](默认任务-58)javax.faces.component.UpdateModelException:javax.el.PropertyNotFoundException:/index.xhtml @ 53,88 value =“#{p.tipo}”:目标无法访问,标识符'p'已解析为null       在javax.faces.component.UIInput.updateModel(UIInput.java:866)       在javax.faces.component.UIInput.processUpdates(UIInput.java:749)       在javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1291)

     

...

     

引起:javax.el.PropertyNotFoundException:/index.xhtml @ 53,88 value =“#{p.tipo}”:目标无法访问,标识符'p'已解析为null       at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:133)       在javax.faces.component.UIInput.updateModel(UIInput.java:832)       ......还有57个   引起:javax.el.PropertyNotFoundException:目标无法访问,标识符'p'解析为null       在com.sun.el.parser.AstValue.getTarget(AstValue.java:173)       在com.sun.el.parser.AstValue.setValue(AstValue.java:225)       at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:294)       at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131)       ......还有58个

@ManagedBean
@ViewScoped
public class Index {

    private static final String IDENTIFICADOR = "identificador";
    private UploadedFile file;
    private boolean skip;
    private boolean proximo = true;
    private String textArea;
    private char separador = ';';
    private String encode = StandardCharsets.ISO_8859_1.displayName();
    private Map<String, String> encodes;
    private boolean carregado;

    private List<String> tipos = new ArrayList<String>() {
        {
            add(IDENTIFICADOR);
            add("nome");
            add("outros");
            add("telefone");
        }
    };

    private List<String[]> linhas;

    private List<DataTableColumn> colunas;
    private List<String> texto = new ArrayList<>();

    public UploadedFile getFile() {
        return file;
    }

    public char getSeparador() {
        return separador;
    }

    public void setSeparador(char separador) {
        this.separador = separador;
    }

    public List<String[]> getLinhas() {
        return linhas;
    }

    public void setLinhas(List<String[]> linhas) {
        this.linhas = linhas;
    }

    public List<String> getTipos() {
        return tipos;
    }

    public void setTipos(List<String> tipos) {
        this.tipos = tipos;
    }

    public boolean isCarregado() {
        return carregado;
    }

    public void setCarregado(boolean v) {
        this.carregado = v;
    }

    public String getEncode() {
        return encode;
    }

    public void setEncode(String encode) {
        this.encode = encode;
    }

    public Map<String, String> getEncodes() {
        return encodes;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }

    public List<DataTableColumn> getColunas() {
        return colunas;
    }

    public void upload(FileUploadEvent event) throws IOException {
        setCarregado(false);

        this.file = event.getFile();
        if (file != null) {
            FacesMessage message = new FacesMessage("Sucesso", event.getFile().getFileName() + " foi uploaded.");
            FacesContext.getCurrentInstance().addMessage(null, message);

            String str = new String(file.getContents());

            if (str.indexOf(getSeparador()) == -1) {
                message = new FacesMessage("Atenção", "nao foi encontrado um separador");
                FacesContext.getCurrentInstance().addMessage(null, message);
                setCarregado(true);

            }
        }
        uploadedFile = new File("C:/Temp/" + file.getFileName());
        FileOutputStream out = new FileOutputStream(uploadedFile);
        out.write(file.getContents());
        out.flush();
        out.close();
        load();
    }

    private File uploadedFile;

    public void load() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(uploadedFile), Charset.forName(getEncode())), getSeparador());

        try {
            String linha;
            int cont = 0;
            StringBuilder linhas = new StringBuilder();
            while ((linha = reader.readLine()) != null) {
                linhas.append(linha).append('\n');
                if (cont++ > 10) {
                    break;
                }
            }
            textArea = linhas.toString().replaceAll(new StringBuilder().append(getSeparador()).toString(), new StringBuilder().append("\t").append(getSeparador()).append("\t").toString());

        } finally {
            reader.close();
        }
    }

    public void loadCSV() throws IOException {
        CSVReader csvReader = new CSVReader(new InputStreamReader(new FileInputStream(uploadedFile), Charset.forName(getEncode())), getSeparador());
        int contador = 0;
        try {
            colunas = null;
            String[] linha;
            linhas = new ArrayList<>();
            DataTableColumn dtc;
            while ((linha = csvReader.readNext()) != null) {
                if (colunas == null) {
                    colunas = new ArrayList<>();
                    for (String c : linha) {
                        dtc = new DataTableColumn(c);
                        colunas.add(dtc);
                        for (String t : tipos) {
                            if (c.contains(t)) {
                                dtc.setTipo(t);
                                break;
                            }
                        }
                    }
                    continue;
                }
                linhas.add(linha);
                if (contador++ >= 10) {
                   break;
                }
            }

        } finally {
            csvReader.close();
        }

    }

    public void preConclusao() {
        DataTableColumn identificador = null;
        DataTableColumn telefone = null;
        for (DataTableColumn dt : colunas) {
            if (IDENTIFICADOR.equals(dt.getTipo())) {
                if (identificador == null) {
                    identificador = dt;
                } else {}
            } else if (dt.getTipo().equals("telefone")) {
                telefone = dt;
            }
        }
    }

    public void onChange() {
        for (DataTableColumn dataTableColumn : colunas) {
            System.out.println(dataTableColumn.getTipo());
        }
    }

    public String getTextArea() {
        return textArea;
    }

    public void setTextArea(String textArea) {
        this.textArea = textArea;
    }

    public boolean isSkip() {
        return skip;
    }

    public void setSkip(boolean skip) {
        this.skip = skip;
    }

    public String onFlowProcess(FlowEvent event) throws IOException {
        if (skip) {
            skip = false; // reset in case user goes back
            return "upload";
        } else {
            if (event.getNewStep().equalsIgnoreCase("configuracao")) {
                return "configuracao";
            }
            if (event.getNewStep().equalsIgnoreCase("visualizacao")) {
                loadCSV();
                return "visualizacao";
            } else {
                return event.getNewStep();
            }
        }
    }

    public List<String> getTexto() {
        return texto;
    }

    public void setTexto(List<String> texto) {
        this.texto = texto;
    }
}
public class DataTableColumn {
    private String cabecalho;
    private String tipo;

    public DataTableColumn(String cabecalho) {
        super();
        this.cabecalho = cabecalho;
    }

    public String getCabecalho() {
        return cabecalho;
    }

    public void setCabecalho(String cabecalho) {
        this.cabecalho = cabecalho;
    }

   public String getTipo() {
        return tipo;
   }

   public void setTipo(String tipo) {
       this.tipo = tipo;
   }
}



<ui:composition 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"
    template="/WEB-INF/template.xhtml">
    <ui:define name="content">
        <div class="Container100">
            <div class="ContainerIndent">
                <div class="ShadowBox TexAlCenter whiteback BlueBorderedBox">
                    <h:form enctype="multipart/form-data">
                        <p:wizard flowListener="#{index.onFlowProcess}"
                            nextLabel="Próximo" backLabel="Anterior">
                            <p:tab id="upload" title="Upload de Arquivo">
                                <p:panel header="Upload de Arquivo">

                                    <h:messages errorClass="error" />

                                    <h:panelGrid columns="2" columnClasses="label, value">

                                        <p:fileUpload fileUploadListener="#{index.upload}"
                                            mode="advanced" dragDropSupport="false" multiple="true"
                                            update="messages" sizeLimit="100000" fileLimit="3"
                                            allowTypes="/(\.|\/)(csv|gif|jpe?g|png)$/" />

                                        <p:growl id="messages" showDetail="true" />


                                    </h:panelGrid>

                                </p:panel>
                            </p:tab>
                            <p:tab id="configuracao" title="Configuração de Arquivo">
                                <h:messages errorClass="error" />
                                <p:panel id="pnlconfig" header="Configuracao de Arquivo">

                                    <div
                                        style="white-space: pre; text-align: left; font-family: monospace;"
                                        class="FontLight">#{index.textArea}</div>
                                    <f:facet name="footer">
                                        <p:inputText value="#{index.separador}" maxlength="1" />
                                        <h:outputText value="Encode:" />
                                        <p:inputText value="#{index.encode}" />
                                        <p:commandButton value="Aplicar" action="#{index.load()}"
                                            update="pnlconfig" />
                                        <!-- <p:commandButton value="Carregar" action="#{index.loadCSV()}" update="@form" />-->
                                    </f:facet>
                                </p:panel>
                            </p:tab>
                            <p:tab id="visualizacao" title="Visualização do Arquivo">
                                <p:panel header="Visualização de Arquivo">
                                    <p:dataTable var="l" value="#{index.linhas}">
                                        <p:columns value="#{index.colunas}" var="p" columnIndexVar="i">
                                            <f:facet name="header">
                                            #{c.cabecalho}
                                            <br />
                                                <p:selectOneMenu id="tipo" value="#{p.tipo}"
                                                    style="width:150px">
                                                    <f:selectItems value="#{index.tipos}" var="t"
                                                        itemValue="#{t}" />
                                                </p:selectOneMenu>
                                            </f:facet>
                                        #{l[i]}
                                        </p:columns>
                                    </p:dataTable>
                                </p:panel>
                            </p:tab>
                            <p:tab id="confirmacao" title="Confirmacao do Arquivo">
                                <p:panel header="Confirmação de Arquivo">
                                    <p:dataTable var="l" value="#{index.linhas}">
                                        <p:columns value="#{index.colunas}" var="o" columnIndexVar="i">
                                            <f:facet name="header">
                                            #{o.tipo}<br />

                                            </f:facet>
                                        #{l[i]}
                                        </p:columns>
                                    </p:dataTable>


                                </p:panel>

                            </p:tab>
                        </p:wizard>
                    </h:form>
                </div>
            </div>
        </div>

    </ui:define>

</ui:composition>

有人可以帮我解决吗?

0 个答案:

没有答案