AJAX 请求后光标插入符号总是在变化
Cursor caret always changing after AJAX request
只要未输入页面上的所有输入字段,我就会尝试使 JSF 页面上的按钮保持禁用状态。
我尝试的第一件事是在按钮上使用部分触发器,在 "Disabled" 属性 上使用 EL 表达式,并在具有输入字段。为了完成这项工作,我还在所有输入字段上将 "AutoSubmit" 设置为 true。
<af:inputText label="First Name" id="fn_input" autoSubmit="true">
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true">
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" partialTriggers="fn_input ln_input" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>
这有效,但是,当两个输入字段都被填充时,只有当用户在字段外单击时(或通过按 Tab 键或单击其他地方将焦点移出字段),按钮才会启用。
所以我尝试的第二种方法是对输入字段的 "keyPress" 事件使用 ajax 调用,并刷新按钮。
<af:inputText label="First Name" id="fn_input" autoSubmit="true">
<f:ajax render="submit_btn" event="keyPress" />
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true">
<f:ajax render="submit_btn" event="keyPress" />
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>
使用上述方法实现了所需的功能,但是,每次用户在字段中键入一个字符时,光标都会回到字段的开头。
使用Chrome的检查工具,我跟踪了ajax调用,发现按钮和按钮都在刷新,从而导致光标插入符重置为单词的开头。
如何解决这个问题?
注:
我使用的是 12c 版。
提交按钮和输入文本不在同一个 panelFormLayout 中,因为设计和布局要求。
提前致谢。
在 Oracle ADF 中,如果您想刷新组件及其所有属性,您需要在其父组件上添加 PPR。
在你的第一个案例中:
<af:panelFormLayout id="pfl1" partialTriggers="fn_input ln_input">
<af:inputText label="First Name" id="fn_input" autoSubmit="true">
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true">
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>
</af:panelFormLayout>
回到这个问题 post 什么最终对我有用。
这是 12.2.1.3 版 ADF 的错误。升级到 12.2.1.4 后,光标插入符号停止返回输入的开头,但按钮仍将保持禁用状态。
将 ajax 事件从“keyPress”替换为“keyUp”就成功了。
<af:inputText label="First Name" id="fn_input" autoSubmit="true" value="#{bindings.FirstName.inputValue}">
<f:ajax render="submit_btn" event="keyUp" />
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true" value="#{bindings.LastName.inputValue}">
<f:ajax render="submit_btn" event="keyUp" />
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>
只要未输入页面上的所有输入字段,我就会尝试使 JSF 页面上的按钮保持禁用状态。
我尝试的第一件事是在按钮上使用部分触发器,在 "Disabled" 属性 上使用 EL 表达式,并在具有输入字段。为了完成这项工作,我还在所有输入字段上将 "AutoSubmit" 设置为 true。
<af:inputText label="First Name" id="fn_input" autoSubmit="true">
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true">
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" partialTriggers="fn_input ln_input" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>
这有效,但是,当两个输入字段都被填充时,只有当用户在字段外单击时(或通过按 Tab 键或单击其他地方将焦点移出字段),按钮才会启用。
所以我尝试的第二种方法是对输入字段的 "keyPress" 事件使用 ajax 调用,并刷新按钮。
<af:inputText label="First Name" id="fn_input" autoSubmit="true">
<f:ajax render="submit_btn" event="keyPress" />
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true">
<f:ajax render="submit_btn" event="keyPress" />
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>
使用上述方法实现了所需的功能,但是,每次用户在字段中键入一个字符时,光标都会回到字段的开头。
使用Chrome的检查工具,我跟踪了ajax调用,发现按钮和按钮都在刷新,从而导致光标插入符重置为单词的开头。
如何解决这个问题?
注:
我使用的是 12c 版。
提交按钮和输入文本不在同一个 panelFormLayout 中,因为设计和布局要求。
提前致谢。
在 Oracle ADF 中,如果您想刷新组件及其所有属性,您需要在其父组件上添加 PPR。
在你的第一个案例中:
<af:panelFormLayout id="pfl1" partialTriggers="fn_input ln_input">
<af:inputText label="First Name" id="fn_input" autoSubmit="true">
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true">
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>
</af:panelFormLayout>
回到这个问题 post 什么最终对我有用。 这是 12.2.1.3 版 ADF 的错误。升级到 12.2.1.4 后,光标插入符号停止返回输入的开头,但按钮仍将保持禁用状态。
将 ajax 事件从“keyPress”替换为“keyUp”就成功了。
<af:inputText label="First Name" id="fn_input" autoSubmit="true" value="#{bindings.FirstName.inputValue}">
<f:ajax render="submit_btn" event="keyUp" />
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:inputText label="Last Name" id="ln_input" autoSubmit="true" value="#{bindings.LastName.inputValue}">
<f:ajax render="submit_btn" event="keyUp" />
<f:validator validatorId="NameValidator"/>
</af:inputText>
<af:button text="Submit" id="submit_btn" disabled="#{empty bindings.FirstName.inputValue or empty bindings.LastName.inputValue}"/>