我想要一个表单,在提交和验证后会打开一个包含结果的新选项卡。我使用该<h:form target="_blank"
方法获取新选项卡,但它在新选项卡中显示验证错误。如果验证通过,我希望它只打开新选项卡。
我的猜测是唯一真正的跨浏览器解决方案是在提交时进行一些 SJAX 验证,但我不确定是否有任何库可以为我执行此操作。
那么,有没有一种方法可以验证并仅在验证通过时打开一个新窗口?
我想要一个表单,在提交和验证后会打开一个包含结果的新选项卡。我使用该<h:form target="_blank"
方法获取新选项卡,但它在新选项卡中显示验证错误。如果验证通过,我希望它只打开新选项卡。
我的猜测是唯一真正的跨浏览器解决方案是在提交时进行一些 SJAX 验证,但我不确定是否有任何库可以
我想要一个表单,在提交和验证后会打开一个包含结果的新选项卡。我使用该<h:form target="_blank"
方法获取新选项卡,但它在新选项卡中显示验证错误。如果验证通过,我希望它只打开新选项卡。
我的猜测是唯一真正的跨浏览器解决方案是在提交时进行一些 SJAX 验证,但我不确定是否有任何库可以为我执行此操作。
那么,有没有一种方法可以验证并仅在验证通过时打开一个新窗口?
如果您可以使用某些 AJAX 行为使用 JavaScript 调用验证,则可以使用如下onSubmit
事件函数轻松完成:
function fnSubmit(){
var validated= performValidation();
if(validated){
document.getElementById('formName').target="_blank";
document.getElementById('formaName').submit();
}
}
由于您没有提供任何代码示例,我假设您在其中使用 a<h:form>
和 a <h:commandButton>
。
如果是这样,你必须做一个简单的技巧来克服这个问题。您必须使用 a<a4j:commandButton>
而不是您的<h:commandButton>
并保持<h:commandButton>
隐藏。然后使用 的oncomplete
事件<a4j:commandButton>
来判断是否click
为<h:commandButton>
.
<h:commandButton
仅当验证通过时才由 javascript 单击。
<h:form target="_blank">
<h:inputText value="" required="true" id="txt"/>
<rich:message for="txt"/>
<a4j:commandButton value="Submit" action="#{bean.someMethod()}"
oncomplete="if(#{!(facesContext.maximumSeverity.ordinal ge 2)}){
#{rich:element('btn')}.click();}"/>
<h:commandButton value="temp" id="btn" style="display:none;"/>
</h:form>
我受到这个线程的启发,为我的问题找到了解决方案。所以我决定也发布我的。如果发生错误并且不打开带有打印页面的新选项卡,我需要留在同一个站点上。
<h:form target="#{printBean.isErrorHappened() ? '_self' : '_blank'}"
id="formPrintSearchResult">
<h:commandLink id="cmdLinkPrintSearchResult"
value="Print overview"
onmouseover="#{rich:element('checkForErrors')}.click();"
action="#{printController.printSearch()}" />
<a4j:commandLink id="checkForErrors" style="display:none;"
render="formPrintSearchResult" />
</h:form>
如果您愿意,可以在 a4j:commandLink 上包含另一个操作来检查错误并在 printBean 中设置 errorHappened。
如果您可以使用某些 AJAX 行为使用 JavaScript 调用验证,则可以使用如下onSubmit
事件函数轻松完成:
function fnSubmit(){
var validated= performValidation();
if(validated){
document.getElementById('formName').target="_blank";
document.getElementById('formaName').submit();
}
}