首先,我會建議來改變你的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
的概念,它是非常簡單的。
非常感謝偉大的答案Nirdesh。有一件事我不能在你所說的理解是:「現在,爲了獲得對XML的支持,您可以使用相同的JAXB的概念,它是非常簡單的。」 你能告訴我該怎麼做嗎? 非常感謝。 –
將對象轉換爲XML文件的概念稱爲編組。你可以看到下面這個簡單例子的鏈接。 http://www.mkyong.com/java/jaxb-hello-world-example/ –