2017-09-06 18 views
1

등록을 완료하면 양식이 정상적으로 지워지지만 페이지를 넘기고 등록 페이지로 돌아 가면 필드는 이전에 등록한 값으로 채워집니다 . 내가 사용하는 범위는 @ViewScoped입니다.JSF 2.2의 양식 및 구성 요소 지우기

등록 페이지 .. Realizar Emprestimos

<h:form id="form" prependId="false"> 

     <p:messages id="msgs"/> 

     <p:toolbar> 
      <f:facet name="left"> 
       <p:toolbarGroup> 
        <p:commandButton value="Confirmar" action="#{empMB.inserir}" process="@this" 
        update="form:list_publicacao" ajax="false"> 
         <f:ajax render="form:list_publicacao" resetValues="true"/> 
        </p:commandButton> 
       </p:toolbarGroup> 
      </f:facet> 

      <f:facet name="right"> 
       <p:toolbarGroup> 
        <p:commandButton value="Cancelar" action="#{empMB.limparCampos()}" 
        immediate="true"> 
         <f:ajax render="@form" resetValues="true"/> 
        </p:commandButton> 
       </p:toolbarGroup> 
      </f:facet> 
     </p:toolbar> 
    <f:ajax event="blur"> 
     <h:panelGrid id="p1" columns="4" layout="grid"> 
      <p:outputLabel value="Usuário: " for="usuario" /> 
      <p:selectOneMenu id="usuario" effect="fade" filter="true" 
       filterMatchMode="contains" 
       value="#{empMB.emprestimo.usuario.idUsuario}" required="true" 
       requiredMessage="Selecione um usuário"> 
       <f:selectItem itemLabel="selecione um usuario" 
        noSelectionOption="true" /> 
       <f:selectItems value="#{usuarioMB.todosUsuarios}" var="usu" 
        itemValue="#{usu.idUsuario}" itemLabel="#{usu.nomeUsuario}" /> 
      </p:selectOneMenu> 

      <p:outputLabel value="Data Emprestimo: " for="dataEmprestimo" /> 
      <p:calendar id="dataEmprestimo" 
       value="#{empMB.emprestimo.dataEmprestimo}" effect="fold" 
       navigator="true" required="true" 
       requiredMessage="Inserir uma data do emprestimo" 
       pattern="dd/MM/yyyy" title="Data do Emprestimo"> 
       <f:convertDateTime pattern="dd/MM/yyyy" locale="pt_BR" 
        timeZone="America/Sao_Paulo" /> 
      </p:calendar> 
     </h:panelGrid> 

     <h:panelGrid id="p2" columns="2" layout="grid"> 
      <p:outputLabel value="Publicacao: " for="publicacao" /> 
      <p:selectOneMenu label="Publicação:" id="publicacao" effect="fade" 
       filter="true" filterMatchMode="contains" 
       value="#{empMB.emprestimo.publicacao.publicacaoId}"> 
       <f:selectItem itemLabel="Selecione uma publicação" 
        noSelectionOption="true" /> 
       <f:selectItems value="#{pubMB.publicacoesDisponiveis}" var="pub" 
        itemValue="#{pub.publicacaoId}" itemLabel="#{pub.titulo}" /> 
       <f:ajax listener="#{empMB.setlistPublicacao()}" 
        render="list_publicacao msgs publicacao" /> 
      </p:selectOneMenu> 
     </h:panelGrid> 


     <h2 style="font-size: 1.9em; margin-top: 3%;">Publicações 
      selecionadas</h2> 

     <p:dataTable reflow="true" id="list_publicacao" 
      value="#{empMB.listPublicacaoDesejada}" var="pub" 
      emptyMessage="Suas publicações aparecerão aqui."> 
      <ui:include src="/colunasPublicacoes.xhtml" /> 
     </p:dataTable> 
    </f:ajax> 
    </h:form> 
</ui:define> 

방법 ..

public Emprestimo inserir() { 
    System.out.println(getListPublicacaoDesejada().size()); 
    try { 
     for (int i = 0; i < getListPublicacaoDesejada().size(); i++) { 
      Calendar dataPrevista = Calendar.getInstance(); 
      dataPrevista.setTime(emprestimo.getDataEmprestimo()); 
      dataPrevista.add(Calendar.DAY_OF_MONTH, 
        Integer.parseInt(JSFHelper.getExternalContext().getInitParameter("previsaoDevolucao"))); 
      emprestimo.setFuncionarioEmprestimo("usuarioteste08"); 
      emprestimo.setDataPrevistaDevolucao(dataPrevista.getTime()); 
      emprestimo.getPublicacao().setPublicacaoId(emprestimo.getListPublicacao().get(i).getPublicacaoId()); 
      emprestimoFacade.inserir(emprestimo); 
     } 
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Emprestimo(s)", "realizado(s) com sucesso!"); 
     RequestContext.getCurrentInstance().showMessageInDialog(message); 
     emprestimo = new Emprestimo(); 
     return emprestimo; 
    } catch (DAOException e) { 
     e.printStackTrace(); 
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Atenção", "Erro ao realizada emprestimo"); 
     RequestContext.getCurrentInstance().showMessageInDialog(message); 
     return null; 
    } 
} 

사전에 대단히 감사드립니다.

+0

RequestScope를 사용해 보셨습니까? –

+0

테스트를 마쳤지 만 동일한 방식으로 진행됩니다. –

+0

은 브라우저 캐싱 일 수 있습니까? – Kukeltje

답변

0

해결되었으므로 PostConstruct 메서드를 MB 시작 부분에 추가했습니다.

@PostConstruct 
public void init() { 
emprestimo = new Emprestimo(); 
} 
+0

대신? 생성자에서 일을하고 있습니까? – Kukeltje