【问题标题】:Partially submitting a form for the purpose of "sequentially" asking for input部分提交表单以“顺序”请求输入
【发布时间】:2011-08-26 09:11:47
【问题描述】:

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

  • 制造商
  • 型号
  • 注册

我使用的是 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 字符串在整个表单提交之前不会被填充,因此我无法查找与所选制造商关联的模型.

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

谢谢!

【问题讨论】:

    标签: java jsf jakarta-ee primefaces


    【解决方案1】:

    只需添加一个 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
    }
    

    【讨论】:

    • 太好了,成功了!我不知道您可以使用 SelectEvent 从文本字段中提取输入。谢谢!
    【解决方案2】:

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

    如果您随后将支持 bean 放在视图范围内,则源自模型输入字段的 ajax 请求将获得相同的实例,并且您可以直接访问您之前记得的制造商字段。

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多