gpt4 book ai didi

java - 动态生成jsf表单问题

转载 作者:行者123 更新时间:2023-12-01 04:52:40 25 4
gpt4 key购买 nike

我正在尝试使用 jsf 和生成表单元素的 back bean 动态渲染表单。

这是后台bean的代码:

@ManagedBean(name = "reviewReportBean")
@SessionScoped
public class ReviewReportBean implements Serializable {
... ... ...
private HtmlPanelGrid dynamicPanelGrid;
... ... ...
public HtmlPanelGrid dynamicPanelGrid() {
Application application = FacesContext.getCurrentInstance().getApplication();
List childrenList = dynamicPanelGrid.getChildren();
childrenList.clear();
... ... ...
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try
{
... ... ...
HtmlOutputLabel label = (HtmlOutputLabel)application.createComponent(HtmlOutputLabel.COMPONENT_TYPE);
label.setValue("Mpla Mpla Mpla");
... ... ...
childrenList.add(label);
... ... ...
String hq9 = "select ... WHERE it (:itid)";
SQLQuery query9 = session.createSQLQuery(hq9);
query9.setParameter("itid",imageTypeId);
query9.addEntity(ReportFormFields.class);
reportFormFields = query9.list();
for(int i=0; i<reportFormFields.size(); i++){
System.out.println("-------------------------");
System.out.println(">> Field Id: " + reportFormFields.get(i).getRffFieldId());
System.out.println(">> Field Name: " + reportFormFields.get(i).getRffFieldName());
... ... ...

HtmlOutputLabel output = (HtmlOutputLabel)application.createComponent(HtmlOutputLabel.COMPONENT_TYPE);
output.setValue(reportFormFields.get(i).getRffFieldLabel());
childrenList.add(output);
if(reportFormFields.get(i).getRffFieldType().equals("Option List")){
HtmlSelectOneMenu combomenu = (HtmlSelectOneMenu)application.createComponent(HtmlSelectOneMenu.COMPONENT_TYPE);
UISelectItems comboItems = new UISelectItems();
String listOptions =reportFormFields.get(i).getRffFieldOptions();
String array[] = listOptions.split("(?<!\\\\),");

for(int j = 0;j<array.length;j++){
System.out.println(">>> list option " + j + " is " + array[j]);
}
comboItems.setValue(array);
combomenu.getChildren().add(comboItems);
childrenList.add(combomenu);

}else{
HtmlInputText input = (HtmlInputText)application.createComponent(HtmlInputText.COMPONENT_TYPE);
childrenList.add(input);
}
... ... ...
}
... ... ...
}
... ... ...
return dynamicPanelGrid;
}
}

这就是我尝试使用 back bean 代码在我的 View (xhtml) 中动态生成表单的方法:

<h:panelGrid id="dynaPanelGrid7" 
binding="#{reviewReportBean.dynamicPanelGrid}" >
</h:panelGrid>

但是表单根本没有生成。但是,如果我这样调用它(直接调用该方法以生成表单):

<h:panelGrid id="dynaPanelGrid7" 
binding="#{reviewReportBean.dynamicPanelGrid()}" >
</h:panelGrid>

我收到以下错误:

can't parse argument number reviewReportBean.dynamicPanelGrid(): /views/view.xhtml @199,63 binding="#{reviewReportBean.dynamicPanelGrid()}": Illegal Syntax for Set Operation

但如果随后我尝试这样调用它:

<h:panelGrid id="dynaPanelGrid7" 
binding="#{reviewReportBean.dynamicPanelGrid}" >
</h:panelGrid>

表单已呈现!!

所以我猜对象dynamicPanelGrid已填充...

关于如何更改我的代码以使表单正常工作有什么想法吗?

最佳答案

dynamicPanelGrid 是您的字段(属性)的名称。 Getter 和 setter 应该如下所示:

@PostConstruct
public void init() {
// init your dynamicPanelGrid
}

public HtmlPanelGrid getDynamicPanelGrid() {
return dynamicPanelGrid;
}

public void setDynamicPanelGrid(HtmlPanelGrid dynamicPanelGrid) {
this.dynamicPanelGrid = dynamicPanelGrid;
}

了解Java Beans .

你的绑定(bind)属性应该如下所示:

binding="#{reviewReportBean.dynamicPanelGrid}"

关于java - 动态生成jsf表单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14706298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com