JSF输入处理顺序

JSF输入处理顺序,jsf,primefaces,Jsf,Primefaces,是否有办法指定提交后输入设置的顺序 我的情况如下: <h:inputText id="fieldA" value=#{myBean.myObject.fieldA}" /> <h:inputText id="fieldB" value=#{myBean.myObject.fieldB}" /> <p:autoComplete id="myObject" value=#{myBean.myObject" converter="myObjectConverter" /&

是否有办法指定提交后输入设置的顺序

我的情况如下:

<h:inputText id="fieldA" value=#{myBean.myObject.fieldA}" />
<h:inputText id="fieldB" value=#{myBean.myObject.fieldB}" />
<p:autoComplete id="myObject" value=#{myBean.myObject" converter="myObjectConverter" />
<h:inputText id="fieldC" value=#{myBean.myObject.fieldD}" />
<h:inputText id="fieldD" value=#{myBean.myObject.fieldC}" />

快捷方式:
您可以从primefaces使用
标记。然后,可以禁用所有输入。将ajax添加到autoComplete中,并在处理autoComplete后更新其他输入。输入<代码>禁用属性可设置为取决于自动完成是否为空。通过这种方式,您将使用户首先进入自动完成。

您可以尝试将
immediate=“true”
设置为
p:autocomplete
,以便在
APPLY\u REQUEST\u VALUES
阶段,在所有其他组件之前对其进行处理

简单的解决方案是在选择
p:autocomplete
项以反映其值时更新
h:inputText
s:

<p:autoComplete id="myObject" value="#{myBean.myObject}" ...>
    <p:ajax event="itemSelect" process="@this" update="fieldA fieldB fieldC fieldD" />
</p:autoComplete>
但是,在我看来,这不是很方便用户


另外,这一次是经过测试的:)

没有什么好办法可以绕过这个问题;你的情况已经不太理想,而且很糟糕(re:无法简单地重新排序字段)。一种解决方法是将
fieldA
fieldB
设置为
myObject
的属性。在转换器中,您可以从组件中提取值。观察

  • 这样设置属性

    <h:inputText id="fieldA" binding=#{fieldA}" />
    <h:inputText id="fieldB" binding=#{fieldB}" />
    <p:autoComplete id="myObject" value=#{myBean.myObject" converter="myObjectConverter">
        <f:attribute name="fieldA" value="#{fieldA}"/>
        <f:attribute name="fieldB" value="#{fieldB}"/>
    </p:autoComplete>
    

  • 更重要的是,为什么不能对表单的字段/逻辑流重新排序?如果您这样做了,您可以避免所有这些讨厌的事情。对于这种情况,我通常会将
    fieldA
    fieldB
    (甚至
    fieldC
    fieldD
    定义为myBean的属性,并在从控制器访问对象时将这些值应用于
    myObject
    。我更新了以前的属性(无虫)回答,请查看:)嗨,Michele,p:自动完成并不总是可选择的:我不能强制选择,因为如果从现有实体中没有选择任何实体,我必须创建一个新实体:如果没有从自动完成中选择建议,输入值将按原样返回给转换器,转换器将创建一个要持久化的新实例。此外,即使选择了自动完成建议并更新了相应的输入,我们也必须能够通过这些相同的输入更新其中一个字段(fieldA-D)。您能发布转换器代码和完整的自动完成标记吗?
    <h:inputText id="fieldA" binding=#{fieldA}" />
    <h:inputText id="fieldB" binding=#{fieldB}" />
    <p:autoComplete id="myObject" value=#{myBean.myObject" converter="myObjectConverter">
        <f:attribute name="fieldA" value="#{fieldA}"/>
        <f:attribute name="fieldB" value="#{fieldB}"/>
    </p:autoComplete>
    
    //Retrieve the fields and cast to UIInput, necessary
    //to retrieve the submitted values
    UIInput fieldA = (UIInput) component.getAttributes().get("fieldA");
    UIInput fieldB = (UIInput) component.getAttributes().get("fieldB");
    
    //Retrieve the submitted values and do whatever you need to do
    String valueA = fieldA.getSubmittedValue().toString();
    String valueB = fieldB.getSubmittedValue().toString();