2012-10-18 18 views
6

Tôi sử dụng DataSource được tạo từ lược đồ xsd. Tôi cần lấy tất cả các trường từ DataSource, cũng như các trường lồng nhau. Vấn đề của tôi là giống như trong this topic from Smartclient forum forum, khi tôi sử dụng DataSource.getFields() chỉ trả lại trường cấp một của nó.nhận tất cả các trường từ DynamicForm

Có ai biết cách tôi cũng có thể nhận các trường lồng nhau không?

Trả lời

0

tôi tìm thấy giải pháp. Để có được các trường lồng nhau, bạn có thể sử dụng DataSource.getDataSource (ID). Ví dụ: nếu dataSource là DataSource chính, thì có thể thực hiện như sau:

private List<DataSourceField> getAllFields(DataSource dataSource) 
    { 
     List <DataSourceField> fieldList = new ArrayList<DataSourceField>(); 
     DataSourceField [] fields = dataSource.getFields(); 
     fieldList.addAll(Arrays.asList(fields)); 
     for (DataSourceField field : fields); 
     { 
      String fieldName = field.getName(); 
      DataSource ds = DataSource.getDataSource(fieldName); 
      if (ds != null) 
      { 
       fieldList.remove(field); 
       DataSourceField[] nFields = ds.getFields(); 
       fieldList.addAll(Arrays.asList(nFields)); 
       getAllFields(ds); 
      } 
     } 
     return fieldList; 
    } 

1

Tôi không chắc chắn liệu điều này có giải quyết được vấn đề của bạn hay không. CompanySlaves không được tham chiếu trong bất kỳ vị trí nào trong xsd. Loại được xác định nhưng không được sử dụng.

Tôi nghĩ rằng bạn cần phải có <xsd:element name="SomeElementName" type="tns:CompanySlaves"></xsd:element> in your xsd definition

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://xml.netbeans.org/schema/newXmlSchema" 
    xmlns:tns="http://xml.netbeans.org/schema/newXmlSchema" 
    elementFormDefault="qualified"> 
    <xsd:element name="SubrogationClaim" type="tns:SubrogationClame"></xsd:element> 
    <xsd:complexType name="SubrogationClame"> 
     <xsd:sequence> 
      <xsd:element name="CompanyName" type="xsd:string"></xsd:element> 
      <xsd:element name="CompanyPlace" type="xsd:string"></xsd:element> 
      <xsd:element name="CompanyEmploee" type="tns:SubrogationClame"></xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="CompanySlaves"> 
     <xsd:sequence> 
      <xsd:element name="EmploeeName" type="xsd:string"></xsd:element> 
      <xsd:element name="EmploeeSalary" type="xsd:string"></xsd:element> 
     </xsd:sequence> 
    </xsd:ComplexType> 
</xsd:schema>