首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF中的动态表单生成

JSF中的动态表单生成
EN

Stack Overflow用户
提问于 2012-11-10 14:35:55
回答 2查看 6.9K关注 0票数 3

我必须在JSF中创建一个应用程序。它有两个表单用于两个体育赛事的数据输入,但要求用户应该能够添加其他事件,即第三、第四等,并具有自己的数据输入属性。

应自动生成这些新事件的相应数据输入表单(以及be DB中的所有必需表),以及用于在表单上保存/编辑功能的业务逻辑。

这在JSF中是可能的吗?如果是,我该怎么做?

EN

回答 2

Stack Overflow用户

发布于 2012-11-11 00:43:12

是的,这在JSF2中是可能的。有多种方法可以做到这一点。

支持以编程方式将组件添加到JSF组件树,但有几点需要注意。首先,您不能在请求处理过程中的任意时间执行此操作。尽管(尚未)指定确切的点,但在实践中,PreRenderViewEvent可以很好地实现这一点。

其次,mojarra2.x的早期版本包含几个bug,这些bug极大地限制了对组件树的编程更改的数量和种类。MyFaces和更高版本的Mojarra都可以。如果您正在使用Mojarra,那么在撰写本文时使用最新发布的版本可能是安全的。

第三个警告是,一些组件不允许动态添加( RichFaces DataTable曾经是这样的组件,也许现在仍然是)。

一个基本的例子:

代码语言:javascript
复制
@ManagedBean
public class DynamicBacking implements SystemEventListener {

    @PostConstruct
    public void init() {
        Faces.getViewRoot().subscribeToViewEvent(PreRenderViewEvent.class, this));
    }

    @Override
    public void processEvent(SystemEvent event) throws AbortProcessingException {
        HtmlOutputText text = new HtmlOutputText();
        text.setValue("test");
        Faces.getViewRoot().getChildren().add(text);
    }

    @Override
    public boolean isListenerForSource(Object source) {
        return source instanceof UIViewRoot;
    }
}

另一种选择是使用Oleg为PrimeFaces扩展创建的DynaForm组件。参见Dynamic forms, JSF world was long waiting for

最后,正如Luiggi提到的,根据你的问题的复杂性,也许你只需要一个绑定了组件的简单<ui:repeat>,比如一个Map (但这取决于你的确切需求)。

票数 6
EN

Stack Overflow用户

发布于 2012-11-11 01:42:31

我已经在我的JSF CMS中完成了这类表单,我已经创建了一个链接到数据库的自定义JSF组件,这样表单和字段就可以在组件中创建和使用。基本上,我呈现一个普通的HTML表单并拦截POST内容。我可以发送一些源代码,如果你感兴趣。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13319934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档