这个问题发生在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>
有人可以帮我解决吗?