2016-12-03 5 views
1

У меня есть страница JSF, где я могу добавить или удалить «самолеты» в моей базе данных (JBDC). Чтобы помочь с этим, у меня есть две бобы (Both @RequestScoped), один «контроллер» и один «поддерживающий bean-компонент».@RequestScoped Bean не работает должным образом? (JSF)

Вот страница JSF:

enter image description here

И с некоторыми входами:

enter image description here

После ввода информации и добавления фотографий, то "самолет" добавляется к моей странице , и я перезагружаю страницу.

Вот как выглядит страница после подачи:

enter image description here

Моя проблема в том, что входные текстовые поля получает «заселена» из фасоли с информацией, а также удаления плоскости поля получает заселена с идентификатором самолета. Я хочу, чтобы эти поля были пустыми после обновления, и поэтому я думал, что использование @RequestScoped будет полезно. Кроме того, если я пытаюсь обновить страницу из своего веб-браузера, она просто пытается повторно отправить форму.

Как я могу избежать заполнения полей данными из компонента?

Кроме того, здесь код боб:

@Named 
@RequestScoped 
public class AddAirplaneCtrl implements Serializable{ 

    @Inject 
    private FlightModel flightModel; 

    private ListAirplaneBB listAirplaneBB; 

    protected AddAirplaneCtrl(){ 
     ; 
    } 

    @Inject 
    public void addListAirplaneBB(ListAirplaneBB listAirplaneBB){ 
     this.listAirplaneBB = listAirplaneBB; 
    } 

    public String addPlane(){ 

     listAirplaneBB.setError(null); 
     listAirplaneBB.setMessage(null); 

     if(failed any of the validation parts){ 
      return /some/site?faces-redirect=false"; 
     } 

     //add plane 
     return /some/site?faces-redirect=true"; 
    } 
} 

И Резервное Bean:

@Named 
@RequestScoped 
public class ListAirplaneBB implements Serializable{ 

    @Inject 
    private FlightModel flightModel; 

    //private variable fields 

    public List<Airplane> getAllPlanes(){ 
     return flightModel.getAirplaneList().findAll(); 
    } 

    public int getTotalPlanes(){ 
     return getAllPlanes().size(); 
    } 

    //GETTERS and SETTERS 

} 

И, наконец, моя страница JSF:

<div class="contbox"> 
        <h3> 
         <h:outputLabel value="Edit Planes" /> 
        </h3> 
        <c:if test="#{not empty listAirplaneBB.error}"> 
         <div class="alert alert-danger" 
          id="success-alert"> 
          <span class="glyphicon glyphicon-remove" /> 
          <h:outputText value="#{listAirplaneBB.error}" /> 
          <button type="button" 
            class="close" 
            data-dismiss="alert"> 
           <h:outputLabel value="x" /> 
          </button> 
         </div> 
        </c:if> 
        <c:if test="#{not empty listAirplaneBB.message}"> 
         <div class="alert alert-success"> 
          <span class="glyphicon glyphicon-remove" /> 
          <h:outputText value="#{listAirplaneBB.message}" /> 
          <button type="button" 
            class="close" 
            data-dismiss="alert"> 
           <h:outputLabel value="x" /> 
          </button> 
         </div> 
        </c:if> 

        <h4>Add A Plane</h4>      
        <h:form enctype="multipart/form-data"> 
        <table id="addtable" 
          class="table"> 
         <thead> 
          <tr> 
           <th> 
            <h:outputLabel value="Plane Make" /> 
           </th> 
           <th colspan="1"> 
            <h:outputLabel value="Plane Model" /> 
           </th> 
           <th colspan="1"> 
            <h:outputLabel value="Plane Seats" /> 
           </th> 
           <th colspan="1"> 
            <h:outputLabel value="Plane Photo" /> 
           </th> 
          </tr> 
         </thead> 
         <tr>  
          <td> 
           <h:inputText value="#{listAirplaneBB.make}"> 
           </h:inputText> 
          </td> 
          <td> 
           <h:inputText value="#{listAirplaneBB.model}"> 
           </h:inputText> 
          </td> 
          <td> 
           <h:inputText value="#{listAirplaneBB.seats}"> 
           </h:inputText> 
          </td> 
          <td> 
           <h:inputFile value="#{listAirplaneBB.file}" > 
           </h:inputFile> 
          </td>  
          <td> 
           <h:commandButton value="Add Plane" 
               class="btn btn-primary" 
               action="#{addAirplaneCtrl.addPlane()}" > 
           </h:commandButton> 
          </td> 
         </tr> 
        </table> 
        </h:form>     
        <h4>Delete Plane</h4> 

        <h:form> 
         <h:panelGrid columns="3" class="table"> 
          <h:outputLabel value="Plane ID" /> 
          <h:inputText value="#{listAirplaneBB.airPlaneId}"/> 
          <h:commandButton value="Delete" 
              class="btn btn-primary" 
              action="#{addAirplaneCtrl.deleteAirplane}" > 
          </h:commandButton> 
         </h:panelGrid> 
        </h:form> 
       </div> 
+0

@BalusC Есть ли у вас информация, которая может вам помочь? – Carlton

ответ

0

Ваш браузер кэш входы.

JSF 2.2 Решение

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"> 
... 
    <f:passThroughAttribute name="autocomplete" value="off"/> 
... 

JQuery Решение:

<h:form styleClass="form">...</h:form> 

<script> 
    $(function(){ 
     $(".form").attr("autocomplete", "off"); 
    }); 
</script> 

Вы можете найти более подробную информацию here.

+0

Я получаю эту ошибку при попытке: «Автозаполнение атрибута не определено в форме компонента». Что означает эта ошибка? – Carlton

+0

Обновленное решение – jklee

+0

В моем случае это не сработало. Я уверен, что это проблема с bean-компонентами, когда bean сохраняет свои значения после перенаправления на ту же страницу. И это обработанный bean-компонентом. Любые идеи о том, как очистить эти поля после перенаправления? – Carlton