首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bootsfaces,ajax,jsf和bean

Bootsfaces,ajax,jsf和bean
EN

Stack Overflow用户
提问于 2018-01-23 13:21:20
回答 1查看 589关注 0票数 0

我正在做一个学校项目,在那里我有一个前端项目和一个后端项目。在我的前端项目中,我使用BootsFacesVersion1.2.0和jsf。后端我有一个网络服务和一个postgres数据库。

我试图通过我的前端项目中的表单通过webservice添加对象(在本例中为cars),并删除这些对象。我的问题是它有时只起作用(通常只有一次)。我尝试了很多不同的解决方案,也浏览了谷歌几天。

以下是一些代码(简化)。

前端html页面:

代码语言:javascript
复制
            <b:dataTable value="#{leasingCarBean.carList}" var="car"
                id="carsTable">
                <b:dataTableColumn value="#{car.licensenumber}" />
                <b:dataTableColumn value="#{car.brand}" />
                <b:dataTableColumn value="#{car.model}" />
                <b:dataTableColumn value="#{car.color}" />
                <b:dataTableColumn value="#{car.year}" />
                <b:dataTableColumn label="Delete">
                    <b:commandButton value="Delete" onclick="ajax:leasingCarBean.deleteCar(car.licensenumber)" update="carsTable"/>
                </b:dataTableColumn>
            </b:dataTable>


            <b:button size="lg" look="info" value="New car" 
                onclick="$('.modalPseudoClass').modal();ajax:leasingCarBean.createNewCar()"
                />

            <b:modal id="amodal" title="New car" styleClass="modalPseudoClass">
                <h:form>
                    <b:inputText placeholder="Licensenumber"
                        value="#{leasingCarBean.newCar.licensenumber}" />
                    <b:inputText placeholder="Brand"
                        value="#{leasingCarBean.newCar.brand}" />
                    <b:inputText placeholder="Model"
                        value="#{leasingCarBean.newCar.model}" />
                    <b:inputText placeholder="Color"
                        value="#{leasingCarBean.newCar.color}" />
                    <b:inputText placeholder="Year"
                        value="#{leasingCarBean.newCar.year}" />
                </h:form>
                <f:facet name="footer">
                    <b:button value="Close" dismiss="modal" />
                    <b:commandButton value="Add" look="primary" dismiss="modal"
                        onclick="ajax:leasingCarBean.postNewCar()" update="carsTable" />
                </f:facet>
            </b:modal>

后背豆前端

代码语言:javascript
复制
@Named
@ViewScoped
public class LeasingCarBean implements Serializable{
   private static final long serialVersionUID = 1L;

   private Cardto newCar;
   private Customerdto newCustomer;

   private WebTarget leasingCarTarget =  ClientBuilder.newClient().target("http://localhost:8080/leasingcarbackend/leasingcar");

   public LeasingCarBean() {}

   @PostConstruct
   public void init() {
       newCar = new Cardto();
       newCustomer = new Customerdto();
   }

   public List<Cardto> getCarList() {
       return leasingCarTarget.path("/carList").request(MediaType.APPLICATION_JSON).get(new GenericType<List<Cardto>>() {});
   }

   public void deleteCar(String licensenumber) {
    leasingCarTarget.path("/deleteCar/{licensenumber}").resolveTemplate("licensenumber", licensenumber).request(MediaType.APPLICATION_JSON).delete();
   }

   public void postNewCar() {
    leasingCarTarget.path("/newCar").request(MediaType.APPLICATION_JSON).post(Entity.json(newCar));
       newCar = null;
   }

   public void createNewCar() {
       newCar = new Cardto();
   }

   public Cardto getNewCar() {
       return newCar;
   }
}

我的一些错误:

  1. 当我添加了一个car,然后单击一个delete按钮(在datatable中的任何一个汽车上),它会计算错误的EL-表达式,leasingCarBean.newCar.licensenumber而不是leasingCarBean.deleteCar(car.licensenumber)。
  2. 当我按下"New“-button时,它会在按下"Add"-button之前调用postNewCar方法,这意味着我会得到空错误,因为我没有填写表单。
  3. 有时,当我试图添加一辆新车时,即使我填写了表格,也会出现以下错误: value="#{leasingCarBean.newCar.licensenumber}":javax.el.PropertyNotFoundException: /admin/allCars.xhtml @100,57 javax.el.PropertyNotFoundException目标不可达,“null”返回null

关于怎么做有什么建议吗?(如有任何帮助,我将不胜感激:)

干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 14:06:17

所以,我解决了我的问题,如果有人对解决方案感兴趣,我想把它发到这里。

我的html页面:

代码语言:javascript
复制
   //My datatable stays the same

            <b:dataTable value="#{leasingCarBean.carList}" var="car"
                id="carsTable">
                <b:dataTableColumn value="#{car.licensenumber}" />
                <b:dataTableColumn value="#{car.brand}" />
                <b:dataTableColumn value="#{car.model}" />
                <b:dataTableColumn value="#{car.color}" />
                <b:dataTableColumn value="#{car.year}" />
                <b:dataTableColumn label="Delete">
                    <b:commandButton value="Delete" onclick="ajax:leasingCarBean.deleteCar(car.licensenumber)" 
                    oncomplete="javascript:location.reload();"/>
                </b:dataTableColumn>
            </b:dataTable>


            <b:button size="lg" look="info" value="New car" 
                onclick="$('.modalPseudoClass').modal()" /> 
                //Took away createNewCar()

            <b:modal id="amodal" title="New car" styleClass="modalPseudoClass">
                <h:form>
                    <b:inputText placeholder="Licensenumber"
                        value="#{leasingCarBean.newCar.licensenumber}" />
                    <b:inputText placeholder="Brand"
                        value="#{leasingCarBean.newCar.brand}" />
                    <b:inputText placeholder="Model"
                        value="#{leasingCarBean.newCar.model}" />
                    <b:inputText placeholder="Color"
                        value="#{leasingCarBean.newCar.color}" />
                    <b:inputText placeholder="Year"
                        value="#{leasingCarBean.newCar.year}" />
                </h:form>
                <f:facet name="footer">
                    <b:button value="Close" dismiss="modal" />
                    <b:commandButton value="Add" look="primary"
                        onclick="$('.modalPseudoClass').modal('hide');ajax:leasingCarBean.postNewCar()" 
                       //Dismiss modal do not work for commandButton
                        update="carsTable" />
                </f:facet>
            </b:modal>

后背豆前端:

代码语言:javascript
复制
@Named
@ViewScoped
public class LeasingCarBean implements Serializable{
private static final long serialVersionUID = 1L;

private Cardto newCar;
private Customerdto newCustomer;

private WebTarget leasingCarTarget = ClientBuilder.newClient().target("http://localhost:8080/leasingcarbackend/leasingcar");

public LeasingCarBean() {}

@PostConstruct
public void init() {
    newCar = new Cardto();
    newCustomer = new Customerdto();
}

public List<Cardto> getCarList() {
    return leasingCarTarget.path("/carList").request(MediaType.APPLICATION_JSON).get(new GenericType<List<Cardto>>() {});
}

public void deleteCar(String licensenumber) {
    leasingCarTarget.path("/deleteCar/{licensenumber}").resolveTemplate("licensenumber", licensenumber).request(MediaType.APPLICATION_JSON).delete();
}

public void postNewCar() {
    leasingCarTarget.path("/newCar").request(MediaType.APPLICATION_JSON).post(Entity.json(newCar));
    newCar = new Cardto(); //Instead of = null
}

//This method is not needed anymore
public void createNewCar() {
    newCar = new Cardto();
}

public Cardto getNewCar() {
    return newCar;
}

希望这对将来的人有帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48402781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档