部分提交表单以"sequentially"要求输入



我有一个JSF页面,用户可以在其中向我的数据库输入他们的汽车。该表单有三个输入字段:

    <
  • 制造商/gh>
  • 登记

我正在使用PrimeFaces 3.0。M2和ManufacturerModel字段都是自动完成的输入字段:

<p:autoComplete id="manufacturer"
                minQueryLength="3"
                completeMethod="#{carController.completeManufacturer}"
                forceSelection="true"
                value="#{carController.manufacturer}" />

模型的字段看起来是一样的,但值明显略有不同。

托管bean看起来如下(稍微缩写):

private String manufacturer;
private String model;
private String registration;
public List<String> completeManufacturer(String query) {
    List<String> ms = new ArrayList<String>();
    for (Manufacturer m : manufacturerFacade.findAllByName(query)) {
        ms.add(m.getLongName());
    }
    return ms;
}
public List<String> completeModel(String query) {
    List<String> ms = new ArrayList<String>();
    for (Model m :
            modelFacade.findAllByManufacturer(manufacturerFacade.findByName(manufacturer))) {
        ms.add(m.getShortName());
    }
    return ms;
}

问题在于填写model字段。我需要这个字段只显示基于所选制造商的自动完成结果,但是托管bean中的manufacturer String在提交整个表单之前不会被填充,因此我无法查找与所选制造商关联的模型。

我如何只提交manufacturer字段,而不提交整个表单,这样我就可以查看所选制造商的型号?

谢谢!

添加一个selectListener,如下所示:

<p:autoComplete id="manufacturer"
                minQueryLength="3"
                completeMethod="#{carController.completeManufacturer}"
                forceSelection="true"
                selectListener="#{carController.manufacturerSelected}"
                value="#{carController.manufacturer}" />

,然后在控制器中:

public void manufacturerSelected(SelectEvent vce) {
    String nameOfSelected = vce.getObject().toString();
    // whatever logic comes to your mind
}

您可以向制造商输入字段添加一个额外的ajax处理程序,然后处理onchange事件。在服务器端处理程序中,只需记住后台bean中的新值。

如果将后台bean放在视图作用域中,则来自模型输入字段的ajax请求将获得相同的实例,并且您可以直接访问先前记住的制造商字段。

相关内容

  • 没有找到相关文章

最新更新