2011-04-13 107 views
0

我想构建一个表单,根据其他组件的状态动态更改可见组件的表单。JSF:动态更改表单

例如...有一些文本框和一些复选框,如果用户激活某个复选框,应该出现一堆其他输入元素。

我可以使用JSF 2.0 + Tomahawk来做到这一点,还是必须让另一个库执行此操作?我该怎么做?如果没有AJAX,这是行不通的,是吗?

在此先感谢!

回答

4

Ajax是一种方便的方法,JSF 2.0带有ajax捆绑。

下面是一个例子:

<h:selectOneRadio value="#{a7.myCheckbox.state}"> 
     <f:selectItem itemLabel="#{bundle.yes}" itemValue="1"/> 
     <f:selectItem itemLabel="#{bundle.no}" itemValue="0"/> 
     <f:ajax render="uawGroup"/> 
</h:selectOneRadio> 

<h:panelGroup id="uawGroup" layout="block"> 
    <h:outputText value="#{bundle.wichmed}" 
     rendered="#{a7.myCheckbox.state == 1}"/> 
    <h:inputText value="#{}" id="myInput" 
     rendered="#{a7.myCheckbox.state == 1}"/> 
</h:panelGroup> 

当点击在h:selectOneRadio(项目值== 1) “是” 的-option将h:panelGroup被渲染。最初它是0(在bean“a7”中设置)。 (h:outputTexth:inputText最初不显示)

h:panelGroup作为包装,因为你只能更新在网页上呈现的实际使用AJAX组件。

+0

这太好了,谢谢!但是如果我想要显示一组特定的组件,如果单击h:按钮,它是如何工作的?谢谢! – geeehhdaa 2011-04-14 15:58:21

+0

为了清楚我想要做什么:我有一些panelGrids,我希望用户一步步地通过它们(填入grid1中的东西,按下使grid2出现的按钮等等) 。我怎样才能做到这一点?我可以让服务器处理grid1的某些输入以在grid2中显示结果吗? – geeehhdaa 2011-04-14 16:32:21

+0

@geeehhdaa你也可以在'h:commandButton'中放入'f:ajax'。使用'execute'属性在ajax调用期间处理输入字段:'' – 2011-04-14 17:45:32