@RequestScoped Bean无法按预期工作? (JSF)

时间:2016-12-03 14:53:52

标签: jsf primefaces jsf-2

我有一个JSF页面,我可以添加或删除"飞机"在我的数据库(JBDC)中。为了帮助我,我有两个bean(两个@RequestScoped),一个"控制器"和一个"支持豆"。

这是JSF页面:

enter image description here

并提供一些意见:

enter image description here

输入信息并添加照片后,"飞机"被添加到我的页面,然后我重新加载页面。

以下是提交后页面的显示方式:

enter image description here

我的问题是,输入文本字段会被填充"来自带有信息的bean,以及删除平面字段将填充飞机ID。我希望刷新后这些字段为空,这就是为什么我认为使用@RequestScoped会很有用。此外,如果我尝试从我的Web浏览器刷新页面,它只是尝试重新发送表单。

如何避免使用bean中的数据填充字段?

此外,这是bean代码:

@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";
    }
}

Backing 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>

1 个答案:

答案 0 :(得分:0)

您的浏览器缓存输入。

JSF 2.2解决方案

    select Month, ifnull(count(id), 0) transactions 
    from `tbl_test` 
    inner join my_month_table  as m on m.month_key = `tbl_test`.month_key 
    where id=" + id + " and Month is not NULL and Year = " + Convert.ToInt32(currentYear) + " 
    group by Month;

jQuery解决方案:

<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"/>
...

您可以找到更多信息here