2013-12-11 48 views
0

我試圖解決以下問題:動態JSF UI組件生成

比方說,我有一個settings.xml文件(如下所示):

<SETTINGS> 
    <username fieldType="TextField" possibleValues="*">username_value</username> 
    <roletype fieldType="DropDownList" possibleValues="normal,admin,agent">admin</roletype> 
    <active fieldType="RadioButtons" possibleValues="true,false">true</active> 
<SETTINGS> 

什麼我想實現如下: 1-當我的頁面第一次加載時,它將解析這個xml文件,並根據fieldType和possibleValues來佈局UI組件。 2-當我的UI組件加載時,我應該能夠配置我的字段的值,這將最終保留在我的settings.xml文件中。

是否存在,這是否一個現成的庫?還是我需要爲自己編寫代碼?

注:我只能使用JSF 1.x的

在此先感謝。

回答

0

首先,我會建議來改變你的XML文件的結構:

<SETTINGS> 
<controls> 
<control label="username" fieldType="TextField"> 
    <values></values> 
    <selvalue></selvalue> 
</control> 

<control label="roletype" fieldType="DropDownList"> 
    <values> 
     <value>normal</value> 
     <value>admin</value> 
     <value>agent</value> 
    </values> 
    <selvalue></selvalue> 
</control> 

<control label="active" fieldType="RadioButtons"> 
<values> 
    <value>true</value> 
    <value>false</value>  
</values> 
    <selvalue></selvalue> 
</control> 

現在使用JAXB這個XML文件parase不同的入級,其中每個XML標籤將成爲一個獨立的班級。 像:

設置:

private List<Control> controls; 

控制:

String label; // Attribute 
    String fieldType; // Attribute 
    Values values; //Property 
    String selValue; //Property 

值:

List<Value> values; ////Property 

值:

String value; //Property 

DynaCritSearchBean:一個bean類

Settings settings; 

一旦數據被加載到相應的類,使用下面的邏輯來在你的XHTML文件動態地創建屏幕:

<h:panelGrid> 
<c:forEach var="control" 
    items="#{dynaCritSearchBean.settings.controls}"> 
    <h:panelGroup> 
    <h:outputText value="#{control.label}" /> 
    </h:panelGroup> 

    <h:panelGroup> 
     <c:choose> 
      <c:when test="#{control.fieldType eq 'TextField'}"> 
      <h:inputText value="#{control.selvalue}" /> 
      </c:when> 

      <c:when test="#{control.fieldType eq 'DropDownList'}"> 
      <h:selectOneMenu value="#{control.selvalue}"> 
       <f:selectItem itemValue="" itemLabel="--select--" /> 
       <c:forEach var="selOneValue" items="#{control.values.values}"> 
        <f:selectItem itemValue="#{selOneValue}" 
           itemLabel="#{selOneValue}" /> 
       </c:forEach> 
      </h:selectOneMenu>   
      </c:when> 

      <!-- Same as above logic for Radio button --> 

     </c:choose> 
     </h:panelGroup> 
    </c:forEach> 
    </h:panelGrid> 

一旦提交表格中,所有選定/輸入的值都設置爲對應的每個控件的selValue

現在,爲了獲得對XML的支持,您可以使用相同的JAXB的概念,它是非常簡單的。

+0

非常感謝偉大的答案Nirdesh。有一件事我不能在你所說的理解是:「現在,爲了獲得對XML的支持,您可以使用相同的JAXB的概念,它是非常簡單的。」 你能告訴我該怎麼做嗎? 非常感謝。 –

+0

將對象轉換爲XML文件的概念稱爲編組。你可以看到下面這個簡單例子的鏈接。 http://www.mkyong.com/java/jaxb-hello-world-example/ –