在参数函数中传递p:selectOneMenu项的值

时间:2014-10-02 18:11:31

标签: jsf primefaces

我想在下拉列表中选择一个值时刷新我的表格,在表格中我想调用一个以所选值作为参数的函数。

我选择的值必须作为参数加入函数calculateAveragePrice

这是我与所有不同地区的合作。

<p:selectOneMenu id="list" value="#{regionController.region}">
    <f:selectItems value="#{regionController.regions}" var="region" itemLabel="#{region.name}"/>
    <f:ajax execute="list" render="myTable" />
</p:selectOneMenu>

这是我要刷新的表格:

 <table id="myTable" class="table table-responsive">
     <tr>
         <td>#{msg.averagePrice}:</td>
         <td>#{flightController.calculateAveragePrice(regionController.region)}</td>
     </tr>
 </table>

RegionController bean:

@Named
@RequestScoped
public class RegionController {
    @Inject
    RegionService regionService;

    private Region region;
    private Collection<Region> regions;

    @PostConstruct
    public void initialize() {
        regions = regionService.findAll();
    }

    public Region getRegion() {
        return region;
    }

    public void setRegion(Region region) {
        this.region = region;
    }

    public void setRegions(Collection<Region> regions) {
        this.regions = regions;
    }
    public Collection<Region> getRegions() {
        return regions;
    }
}

1 个答案:

答案 0 :(得分:1)

如果我做对了,那只是一个设计问题。

您可以在region内创建一个名为flightController的属性。

然后,你会:

<p:selectOneMenu id="list" value="#{FLIGHTCONTROLLER.region}">
     <f:selectItems value="#{regionController.regions}" var="region" itemLabel="#{region.name}"/>
     <f:ajax execute="list" render="myTable" />
</p:selectOneMenu>

现在,您不必将区域作为参数传递,因为FlightController已经通过ajax设置了该属性。

你的方式是,你无缘无故地设置了regionController.Region。