我正在使用JSF2.1.
是什么beetween的区别execute="@form"
,并this.submit()
在下面的代码?
<f:ajax execute="@form" render="@form"/>
Run Code Online (Sandbox Code Playgroud)
和:
<h:form onkeypress="if (event.keyCode == 13) this.submit();">
Run Code Online (Sandbox Code Playgroud)
前者似乎提交值并重新呈现表单,而后者则导致页面刷新.当在表单中按下回车键时,有没有办法使用ajax?我正在尝试检测inputText
框中按下的回车键.我尝试过这样的事情:
<h:inputText value="#{a.name}" >
<f:ajax execute="@this" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
但这只会导致在您点击其他内容时提交值(在valueChange之后).
为了回答您问题的标题,它们之间的区别在于,表单提交发送整个表单并重新加载视图,而ajax表单执行也提交整个表单,但是使用ajax请求,该请求只能用于呈现响应发生之前视图的特定部分。
关于您的问题内容,Enter在主流浏览器中都通过按键提交表单来实现单个输入表单。无需对onkeypress
事件进行JavaScript处理,因为浏览器会检测到该事件并默认发送表单。
因此,按下“ 发送”按钮或Enter按键,下一个代码段在服务器端具有相同的结果:value
设置了属性。请注意,在第二种形式中,<h:inputText />
具有的ajax行为,在按下键时,h:outputText
值也会刷新(即使未指定render
属性)Enter,这是因为完全提交请求的优先级高于ajax请求,整个页面重新加载。只有Google Chrome浏览器似乎可以说明该冲突:httpError:Http传输返回了0状态代码。这通常是混合ajax和完整请求的结果。
完整要求:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head />
<body>
<h:form>
<h:inputText value="#{bean.value}" />
<h:commandButton value="Send" />
</h:form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Ajax请求:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head />
<body>
<h:form>
<h:inputText value="#{bean.value}">
<f:ajax />
</h:inputText>
<h:outputText value="Echo: #{bean.value}" />
</h:form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果表单具有多个输入字段,则可以使用完整的提交请求,如果没有任何提交按钮,则可以使用此类javascript验证来发送表单。如果有的话,那是没有必要的。
最后,如果要在按下键并更新模型值时执行ajax请求,请使用onkeypress
attribute:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head />
<body>
<h:form>
<h:inputText value="#{bean.value}"
onkeypress="if (event.keyCode == 13) {onchange(); return false; }">
<f:ajax render="echo" />
</h:inputText>
<h:inputText value="#{bean.value2}" />
<h:outputText id="echo" value="Echo: #{bean.value}" />
</h:form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
提醒您,建议使用“提交”按钮来解决可访问性问题。
也可以看看:
归档时间: |
|
查看次数: |
14728 次 |
最近记录: |