2011-04-06 44 views
0

我需要你推荐一个JSF组件,它可以在以下场景中提供帮助(我将首先粘贴一个图像,帮我解释一下): enter image description here我需要一个按钮来执行一个动作,但不会触发验证或刷新页面(JSF 2.0)

此页面,你在图像中看到的是一个注册页面,每个小组有不同的领域和小工具,当点击注册按钮时,新用户保存到数据库中。

我遇到的问题是在显示按钮。点击每个面板顶部的按钮应显示一个面板并隐藏另一个面板,但不能触发字段验证。

我使用由属性“验证”(结合有背衬Bean的方法)字段验证大多数JSF输入字段具有。 目前,您看到的所有内容都在一个h:表格内。

- 我该怎么做才能显示面板并隐藏另一个,而不触发隐藏面板的验证?

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

-Putting在不同的H每个面板:表单可以做的伎俩(是permited?)

- 什么,你觉得这是最好的方法?

+0

两个面板的表单内容是否相互关联?即一个真正的提交必须将两个面板的数据放入一个托管bean中? – BalusC 2011-04-06 19:37:43

+0

不,他们是不同的。一个属于称为买方的实体,另一个属于称为卖方的实体。另外我有2个不同的托管bean在该页面中被调用。目前,我设法做我想要的不同形式,并使用手风琴http://www.primefaces.org/showcase/ui/accordionPanel.jsf我想用上面的想法替换这个组件。 nikki说的评论是好的,它的工作原理,但我不希望在我的页面中显示该JavaScript语法。有任何想法吗? – sfrj 2011-04-07 12:52:40

+1

如果他们不同,彼此独立,每个**肯定**需要在自己的''中。你不应该把所有东西都放在一个大的形式上。我不会将此发布为答案,因为这已经得到解答。 – BalusC 2011-04-07 12:54:29

回答

3

使用号码:TabView的primefaces里,然后把你的内容(注册板)在单独的选项卡,使用两个选项卡的单独表格,它将解决您的问题....

eg

<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> 
+0

这是正确的,这是一个有趣的选择。它的工作,谢谢。 – sfrj 2011-04-07 13:12:19

+0

享受.... :) :) – Jitesh 2011-04-08 05:27:10

0

您知道即时属性,允许在不更改数据的情况下进行刷新。

不幸的是,不记得输入的更改,所以你可能在被明确在你的行动,而不是由JSF本身完成验证结束。

+0

它可以做到没有刷新,也许?那么f:ajax组件可以帮助我吗?如果是的话如何? – sfrj 2011-04-06 17:51:03

+0

我不明白你的意思是拉出验证。我需要它像现在一样工作。为了避免像我说的那样触发它,我所做的就是使用不同的表单,这种方式起作用了,但现在问题是当单击顶部按钮时隐藏和显示每个表单。 – sfrj 2011-04-07 09:41:15

+0

让你的问题对BalusC有吸引力 - 他知道他在谈论什么,如果他的回答只是做他的建议。 – 2011-04-07 09:50:18

1

-我应该怎么做才能显示面板并隐藏其他对象而不触发隐藏面板的验证?

使用两h:form

那儿另一替换H:commandLink或H:命令按钮(它们触发验证)?

使POST,您只能使用他们

我会用rich:modalpanel此目的

+0

谢谢,看起来不错,但我不能使用richfaces,我已经使用primefaces,我尽量避免在同一个项目中混合他们,我在过去有冲突。对于我的面板,我使用primefaces的p:面板。我会用2种形式来尝试这件事。如何刷新页面,我可以显示和隐藏没有刷新的面板?(也许ajax?) – sfrj 2011-04-06 17:56:47

+0

我会使用'rerendered'属性重新渲染,不知道它是否是RF特定 – 2011-04-06 18:46:32

+0

这听起来不错当点击其中一个按钮时,我将渲染的值设置为true? – sfrj 2011-04-06 18:53:59

1

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

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

返回假将限制从提交页面,因此页面不会刷新,因为没有数据回传到服务器,验证阶段将不会执行。

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

+0

是的,这可能是我认为最简单的方式,我会等待更多,如果我没有找到另一种方法,我会使用它。感谢代码。 1+ – sfrj 2011-04-07 09:36:11

相关问题