我正在寻找以下问题的解决方案:_The是具有不同类型汽车的链接的列表。_用户可以单击列表中的每辆车,并且应该发送ajax请求。_ajax请求的响应应取决于(每辆车的)id,并显示在panelGroup中。
因此,我需要在后备bean上调用方法的可能性。此外,应使用汽车ID作为其参数来调用此方法。
到目前为止,我的代码如下:
... function showDetails(detailsFor){ jsf.ajax.request(this, event, {render: 'form1:carDetails'}); } ... <ul> <ui:repeat value="#{carTree.getCars)}" var="car"> <h:outputScript name="jsf.js" library="javax.faces" target="head" /> <li onclick="showDetails(#{car.id});">#{car.name}</li> </ui:repeat> </ul> ... <h:panelGroup id="carDetails" layout="block" style="float:left;"> // need the details of each 'selected /clicked' car here </h:panelGroup> ...
支持bean中的方法应如下所示:
public class CarTree { ... public String getCarDetails(int carid){ return "The car details for the car id "+carid+" are......"; } ... }
我不知道如何通过使用新的JSF 2.0 AJAX功能来调用方法。请帮我…
使用f:setPropertyActionListener将对象从JSF页面传递到您的后端。当您使用可重复使用的组件(例如数据表)时,此标签特别有用
无需使用原始JavaScript,可以使用。另外,不必担心汽车ID和其他所有信息,只需将其完全发送到备用bean。
这是一个示例示例:
汽车类:
public class Car { int id; String brand; String color; public Car(int id, String brand, String color) { this.id = id; this.brand = brand; this.color = color; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } }
CarTree类:
import java.util.ArrayList; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; @ManagedBean(name = "CarTree") @RequestScoped public class CarTree { List<Car> carList; Car selectedCar; public Car getSelectedCar() { return selectedCar; } public void setSelectedCar(Car selectedCar) { this.selectedCar = selectedCar; } public List<Car> getCars() { return carList; } public void setCars(List<Car> carList) { this.carList = carList; } public CarTree() { carList = new ArrayList<Car>(); carList.add(new Car(1, "jaguar", "grey")); carList.add(new Car(2, "ferari", "red")); carList.add(new Car(3, "camri", "steel")); } }
JSF页面:
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>Facelet Title</title> </h:head> <h:body id="mainBody"> <h:form id="carForm"> <h:dataTable value="#{CarTree.cars}" var="car"> <h:column> <h:outputText value="#{car.id}"/> </h:column> <h:column> <h:outputText value="#{car.brand}"/> </h:column> <h:column> <h:outputText value="#{car.color}"/> </h:column> <h:column> <h:commandButton value="Show Car Detail" > <f:setPropertyActionListener target="#{CarTree.selectedCar}" value="#{car}"/> <f:ajax render=":carForm:carDetails" /> </h:commandButton> </h:column> </h:dataTable> <h:panelGroup id="carDetails" layout="block" style="float:left;"> <h:outputText value="#{CarTree.selectedCar.id}" /> <h:outputText value="#{CarTree.selectedCar.brand}" /> <h:outputText value="#{CarTree.selectedCar.color}" /> </h:panelGroup> </h:form> </h:body> </html>
希望这可以帮助。