如何仅在单击提交按钮时调用表单操作
How to invoke a form action only when clicking the submit button
向页面发送不带任何查询参数的jsf请求时,jsf代码如下:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:jsf="http://xmlns.jcp.org/jsf">
<head>
<title>Search for Word</title>
</head>
<body>
<div>
<form method="get" action="#{dictionary.search()}" id="search">
<input jsf:id="keyword" value="#{dictionary.keyword}" />
</form>
<button type="submit" form="search" value="Submit">Submit</button>
</div>
</body>
</html>
动作 dictionary.search()
总是被调用,即使没有点击提交按钮。但是,在单击 提交 按钮之前不会调用该操作。
问题:如何更改 jsf 代码 没有任何其他额外的标签库,只有提供的 jsf 选项卡库,即传递元素 以便托管 bean 方法 dictionary.method()
仅在单击 提交 按钮时调用?
首先 - 您的提交按钮必须位于表单标记内。然后尝试在按钮上设置动作,而不是在表单上以避免提交。
希望对您有所帮助。
<body>
<div>
<h:form>
...
<h:commandLink action="#{dictionary.search()}" value="Submit" />
</h:form>
</div>
</body>
@BalusC 评论我最好的是:
<form method="get" id="search" jsf:action="#{bean.search}" >
<input jsf:id="keyword" value="#{bean.keyword}" />
<input type="submit" jsf:action="#{bean.search}" value="SUBMIT"
</form>
但仅将 jsf:action 放在 form 和 input 这两个标签上是可能让它工作。
也许@BalusC 可以告诉我们正确的方法。
最终我自己找到了答案:
<form jsf:id="form">
<input type="text" jsf:value="#{dictionary.keyword}" />
<button jsf:action="#{dictionary.search}">Search</button>
</form>
这里的nitty-gritty是代h:commandButton
生成的等价组件树
基于 jsf 2.2 教程 8.5 HTML5-Friendly Markup,
To make an element that is not a JavaServer Faces element a pass-through element, specify at least one of its attributes using the http://xmlns.jcp.org/jsf namespace
整个表单必须作为 jsf 组件传递给 jsf,<form>
元素必须像这样 <form jsf:id="form">
,其中值id
实际上可能是随机的
<input>
和 <button>
元素也是如此,至于 <input>
元素,type
属性必须赋值,此处是 text
向页面发送不带任何查询参数的jsf请求时,jsf代码如下:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:jsf="http://xmlns.jcp.org/jsf">
<head>
<title>Search for Word</title>
</head>
<body>
<div>
<form method="get" action="#{dictionary.search()}" id="search">
<input jsf:id="keyword" value="#{dictionary.keyword}" />
</form>
<button type="submit" form="search" value="Submit">Submit</button>
</div>
</body>
</html>
动作 dictionary.search()
总是被调用,即使没有点击提交按钮。但是,在单击 提交 按钮之前不会调用该操作。
问题:如何更改 jsf 代码 没有任何其他额外的标签库,只有提供的 jsf 选项卡库,即传递元素 以便托管 bean 方法 dictionary.method()
仅在单击 提交 按钮时调用?
首先 - 您的提交按钮必须位于表单标记内。然后尝试在按钮上设置动作,而不是在表单上以避免提交。
希望对您有所帮助。
<body>
<div>
<h:form>
...
<h:commandLink action="#{dictionary.search()}" value="Submit" />
</h:form>
</div>
</body>
@BalusC 评论我最好的是:
<form method="get" id="search" jsf:action="#{bean.search}" >
<input jsf:id="keyword" value="#{bean.keyword}" />
<input type="submit" jsf:action="#{bean.search}" value="SUBMIT"
</form>
但仅将 jsf:action 放在 form 和 input 这两个标签上是可能让它工作。
也许@BalusC 可以告诉我们正确的方法。
最终我自己找到了答案:
<form jsf:id="form">
<input type="text" jsf:value="#{dictionary.keyword}" />
<button jsf:action="#{dictionary.search}">Search</button>
</form>
这里的nitty-gritty是代h:commandButton
基于 jsf 2.2 教程 8.5 HTML5-Friendly Markup,
To make an element that is not a JavaServer Faces element a pass-through element, specify at least one of its attributes using the http://xmlns.jcp.org/jsf namespace
整个表单必须作为 jsf 组件传递给 jsf,<form>
元素必须像这样 <form jsf:id="form">
,其中值id
实际上可能是随机的
<input>
和 <button>
元素也是如此,至于 <input>
元素,type
属性必须赋值,此处是 text