使用带有javascript的托管bean来创建元素

时间:2012-07-05 22:52:44

标签: java javascript jquery jsf jsf-2

我的问题有点复杂,我有一个托管bean,可能是一个会话作用域,现在在这个bean中,我检索存储在数据库中的有关某些元素的信息(它们的宽度,高度,它们的X,Y坐标..等),但这些元素的数量是动态存储的,这意味着它们没有一定数量,另一方面是它们也可能有另一个嵌套在里面的元素。

就像存储div的位置和坐标,以及其中的p元素一样,那么现在我想使用托管bean来相应地创建元素。

1-我应该使用什么? (现在我使用的是JSF 2 Facelets和Javascript / jQuery)。

2-使用您推荐的工具做什么是正确的方法。

我正在寻找一些在JSF页面中表现得像这样的东西

可以使用jsf和javascript / jquery ??

完成
for(every i in elements.div)
{
     create a div element
    then
     for(every i in div.p )
     create a p element in that div
     width of p element = p.width
    .
    .
    .
    load all element info 
}

2 个答案:

答案 0 :(得分:1)

您可以使用组件绑定。在您的JSF页面上,您可以引用您的支持bean,它提供了准备好的JSF树组件。

<p>Here comes a dynamic content</p>
<h:panelGroup binding="#{myBackingBean.generatedElements}"/>

在您的支持bean中,您可以根据需要创建和嵌套元素

...
public class MyBackingBean {
...

private HtmlPanelGroup generatedElements = new HtmlPanelGroup();

public void init() {
     for (Element e : myElements) {
         // Take any element type you want
          HtmlOutputText subElement = new HtmlOutputText();
          subElement.setValue(e.getText());
          generatedElements.getChildren().add(subElement);
     }
}

您还可以使用subElement.setValueExpression方法构建具有JSF表达式定义的动态属性的组件。例如,国际化。

答案 1 :(得分:0)

你可能想看一下https://vaadin.com/,这无疑是一种不同的方法,但也许可以做你真正想要的和更多。

修改
由于您无法更改框架(这是可以理解的),请查看How to create dynamic JSF form fields。基本上所有必要的步骤都列在那里。您可以采用类似的方法来创建<div><p>标记,而不是表单元素。