[英]Generated dynamically a jsf form issue
我正在嘗試使用jsf和生成表單元素的back bean動態呈現表單。
這是back 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代碼在視圖(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 Bean的信息 。
比綁定屬性應如下所示:
binding="#{reviewReportBean.dynamicPanelGrid}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.