我需要一个执行操作但不触发验证或刷新页面的按钮(JSF 2.0)

时间:2011-04-06 17:46:55

标签: java jsf java-ee jsf-2 java-ee-6

我需要你推荐一个JSF组件,它可以在以下场景中提供帮助(我将首先粘贴一个可以帮助我解释的图像): enter image description here

您在图片中看到的页面是注册页面,每个面板都有不同的字段和小工具,单击注册按钮时,新用户将保存到数据库中。

我遇到的问题是显示按钮。单击每个面板顶部的按钮应显示一个面板并隐藏另一个面板,但它们不得触发现场验证。

我使用大多数JSF输入字段具有的属性“validator”(结合支持bean方法)进行字段验证。 目前你在那里看到的一切都在一个h:form。

- 如何在不触发隐藏面板验证的情况下显示面板并隐藏另一面板?

- 是否有另一种替代h:commandLink或h:commandButton(它们会触发验证)?

- 以不同的h:形式输入每个面板可以做到这一点吗?(这是否有效?)

- 你认为最好的方法是什么?

4 个答案:

答案 0 :(得分:3)

使用p:tabView的primefaces,然后将你的内容(注册面板)放在单独的标签中,为两个标签使用单独的表格,它将解决你的问题....

e.g。

 <p:tabView>
        <p:tab title="panel1">
            <h:form id="form1" prependId="false">
                <h:inputText label="Sample Label"/>
                <p:commandButton value="register"/>
            </h:form>
        </p:tab>
        <p:tab title="panel2">
            <h:form id="form2" prependId="false">
                <h:inputText label="Sample Label"/>
                <p:commandButton value="register"/>
            </h:form>
        </p:tab>
    </p:tabView>

答案 1 :(得分:1)

  

- 如何在不触发隐藏面板验证的情况下显示面板并隐藏另一面板?

使用两个h:form

  

还有另一种替代h:commandLink或h:commandButton(它们会触发验证)?

进行POST,你必须只使用它们

我会为此目的使用rich:modalpanel

答案 2 :(得分:1)

对于面板的切换,为什么不使用JavaScript?

<h:commandButton value="Show panel 1" onclick="$('#panel1').hide();$('#panel2').show();return false;"/>

return false 会限制页面提交,因此页面不会刷新,因为没有数据回发到服务器,验证阶段永远不会执行。

底线:恕我直言,这可以在客户端处理。

答案 3 :(得分:0)

您知道immediate属性,允许刷新而不更改数据。

不幸的是,它不记得输入的更改,因此您最终可能会在您的操作中明确地执行验证而不是JSF本身。