使用托管bean和javascript创建元素

使用托管bean和javascript创建元素,java,javascript,jquery,jsf,jsf-2,Java,Javascript,Jquery,Jsf,Jsf 2,我的问题有点复杂,我有一个托管bean,可能是一个会话范围的bean,现在在这个bean中我检索数据库中存储的关于一些元素的信息(它们的宽度、高度、X、Y坐标等等),但是这些元素的编号是动态存储的,这意味着它们没有特定的编号,另一件事是,它们也可能嵌套了另一个元素 就像存储div的位置和坐标,以及其中的p元素和它们的信息一样,现在我想使用托管bean来创建相应的元素 1-我应该使用什么?(现在我正在使用JSF2Facelets和Javascript/jQuery) 2-使用您推荐的工具,正确的方

我的问题有点复杂,我有一个托管bean,可能是一个会话范围的bean,现在在这个bean中我检索数据库中存储的关于一些元素的信息(它们的宽度、高度、X、Y坐标等等),但是这些元素的编号是动态存储的,这意味着它们没有特定的编号,另一件事是,它们也可能嵌套了另一个元素

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

1-我应该使用什么?(现在我正在使用JSF2Facelets和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 
}

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

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

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

您可能想看看哪种方法是公认的不同方法,但可能会做您真正想要的事情,甚至更多

编辑

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

那么我在托管bean中创建元素了吗?在facelet中有没有其他方法来创建它?@Developer106,如果您的结构不太复杂,您可以尝试使用类似于
的方法来完成它,并根据您的数据渲染元素。例如
。另一个选项是将托管bean中的HTML源代码呈现到字符串中,并在不转义的情况下将其注入:
,因此没有for循环和if语句可用?@Developer106,对于条件语句,可以使用JSTL标记库
等。但是,始终建议使用元素的
rendered
属性来显示/隐藏它们,并保持JSF文档树的稳定。是的,我担心你会这么说。没错,但从我看到的情况来看,给出的代码也适用于JSF 2.0。
...
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);
     }
}