Chr*_*phS 5 ajax jsf primefaces jsf-2.2
有没有办法推迟一个keyup ajax请求,直到啊:inputText值已达到定义的长度?
我想达到以下目标:textInput字段必须填充组合的日期和时间值.预期的格式是:ddMMHHmm
一旦值达到8个字符的长度,就必须将新的事件对象添加到数据列表中,并且应该立即显示以进行确认.要确认添加新事件,用户只需在此textInput字段中按Enter键即可.
我不知道是否有不同的功能,而不是使用ajax keyUp事件验证输入没有任何进一步的用户交互?
在这里,您可以看到我的想法的一个非常简短的例子:
@Named
@SessionScoped
public class EventController {
private Date selectedDate; // +getter/+setter
private MyEvent event;
private List<MyEvent> events; // ArrayList<MyEvent>(), +getter
@PostConstruct
private void init() {
// load current events from DAO
}
public void validateInput() {
event = new MyEvent(selectedDate);
events.add(event);
}
public void confirmEvent() {
eventDAO.addEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
并且观点:
<h:inputText
value="#{eventController.selectedDate}"
converter="#{comfortableDateTimeInputConverter}"
id="inputDateTime">
<f:ajax
<!-- pseudo code on !!! -->
executeCondition="<lengthOfInputField equals 8>"
<!-- pseudo code off !!! -->
execute="inputDateTime"
render="eventData"
event="keyup"
listener="#{eventController.validateInput}"
/>
</h:inputText>
<h:commandButton ... actionListener="#{eventController.confirmEvent}" />
<h:panelGroup id="eventData">
<h:dataTable var="..." value="#{eventController.events}">
// display event properties
</h:dataTable>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
ComfortableDateTimeInputConverter提取输入字符串的时间部分的日期并返回日期对象.
我在用
正如BalusC所建议我修改了我h:inputText
,但似乎没有任何事情发生.这是我的原始代码exept控制器名称.我在里面添加了一条日志消息eventController.validateNewEvent
,但似乎没有执行.我错过了什么?
<h:inputText
readonly="#{empty eventController.selectedPerson}"
value="#{eventController.selectedDate}"
id="inputDateTime"
tabindex="3"
converter="#{comfortableDateTimeInputConverter}"
onkeyup="return value.length >= 8"
onfocus="this.select()">
<f:ajax
event="keyup"
execute="inputDateTime"
listener="#{eventController.validateNewEvent}"
render="selectedDate txtDate listEvents" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
我也尝试render="@all"
了ajax元素,但仍然没有任何反应.如果我使用event="blur"
并使用TAB保留输入,它就像一个魅力......
更换
onkeyup="return value.length >= 8"
Run Code Online (Sandbox Code Playgroud)
同
onkeyup="return this.value.length >= 8"
Run Code Online (Sandbox Code Playgroud)
它的工作原理.查看BalusC的回答......
只需return false
从onkeyup
只要value.length
还没有达到期望值.
例如
<h:inputText ... onkeyup="return this.value.length >= 8">
<f:ajax event="keyup" ... />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2069 次 |
最近记录: |