2014-01-28 3 views
0

я следующее цель на классы:Как создать подкласс с бульдозером?

public class Person { 
    private String firstName; 
    private String lastName; 
    ... 
} 

public class Employee extends Person { 
    private String postion; 
    ... 
} 

public class PersonContainer { 
    private Person person; 
    ... 
} 

И это мой источник:

public class Form { 
    private String firstNameEmployee; 
    private String lastNameEmployee; 
    private String positionEmployee; 
    ... 
} 

ЦЕЛЬ:

Я хотел бы получить объект PersonContainer но не с Человек объект с Сотрудник объект. Я действительно не знаю, как это достичь. Как сообщить Dozer о создании подкласса?

Это отображение дает Person объект:

<mapping> 
    <class-a>hl.test.dozer03.form.Form</class-a> 
    <class-b>hl.test.dozer03.result.PersonContainer</class-b> 


    <field> 
     <a>firstNameEmployee</a> 
     <b>person.firstName</b> 
    </field> 

    <field> 
     <a>lastNameEmployee</a> 
     <b>person.lastName</b> 
    </field> 

</mapping> 

Можно ли это сделать slighty модифицирующий это отображение?

ответ

0

Попробуйте изменить поле класса Person в защищенном таким образом, они могут быть унаследованы

public class Person { 
    protected String firstName; 
    protected String lastName; 
    ... 
} 

Изменить от PersonContainer к (что именно вы хотите)

public class EmployeeContainer { 
    private Employee employee; 
    ... 
} 

Надеется, что это помогает

+0

сожалению переход от PersonContainer к EmployeeContainer это не так. Это простой пример более сложной проблемы. Главное здесь - создать экземпляр подкласса Employee и поместить его в поле суперкласса. – Hubert

1

You необходимо использовать custom-createMethod. http://dozer.sourceforge.net/documentation/customCreateMethod.html

Что-то вроде этого:

<mapping> 
    <class-a>hl.test.dozer03.form.Form</class-a> 
    <class-b create- method="PersonContainerFactory.createPersonContainer">hl.test.dozer03.result.PersonContainer</class-b> 


    <field> 
    <a>firstNameEmployee</a> 
    <b>person.firstName</b> 
    </field> 

    <field> 
    <a>lastNameEmployee</a> 
    <b>person.lastName</b> 
    </field> 

</mapping> 

С класса Java:

public class PersonContainerFactory { 

    public static PersonContainer createPersonContainer(){ 
     PersonContainer cont = new PersonContainer(); 
     cont.setPerson(new Employee()); 
     return classA; 
    } 
} 
+0

Да, это прекрасно работает. Только одно: знаете ли вы, как установить значение для Employee.position? person.position не работает, так как тип поля PersonContainer.person - Person. – Hubert

+0

Вы можете сделать что-то подобное с помощью пользовательского конвертера при сопоставлении полей. field1field2 И если пользовательский преобразователь работает, если целевой объект является сотрудником, если это так, произведите его и установите значение. http://dozer.sourceforge.net/documentation/customconverter.html – M21B8

 Смежные вопросы

  • Нет связанных вопросов^_^