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();