J'ai une classe abstraite "Agent" et 3 autres sous-classes "Développeur", "Support" et "Admin"passe paramètre abstrait à la fonction requestMapping avec botte de printemps
Voici ce la source de code de "Agent":
@Entity
@Table(name = "agents")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "role", discriminatorType =
DiscriminatorType.STRING, length = 3)
public abstract class Agent implements Serializable {
@Id
@GeneratedValue
private int id;
private String name;
private String lastName;
.........}
la source de code de "développeur" 01
classe@Entity
@DiscriminatorValue("dev")
public class Developer extends Agent {
/*------------------- constructors -------------------*/
public Developer() {
super();
}
public Developer(String name, String lastName, ....) {
super(name, lastName, ...);
}
}
Le reste des classes "Admin", "Supprort" a la même forme.
Voici mon code contrôleur contrôleur Admin:
@Controller
public class AdminController {
/*------- attributs -------*/
@Autowired
@Resource(name = "admin")
private IAdmin iAdmin;
@Autowired
private AgentValidator agentValidator;
........
@RequestMapping(value = "/admin/save/developer", method = RequestMethod.POST)
public String createAgentAccount(Model model, String admin_id, String confirmPassword, String action, @ModelAttribute("agent") Developer developer, BindingResult result) {
Agent admin = iAdmin.profile(Integer.parseInt(admin_id));
developer.setConfirmPassword(confirmPassword);
agentValidator.validate(developer, result);
if (result.hasErrors()) {
model.addAttribute("action", action);
return "formAgents";
}
if (action.equals("create")) {
iAdmin.createAgent(admin, developer);
} else {
iAdmin.updateAgent(admin, developer);
}
return "redirect:/admin/show/agents";
}
.......
Comme vous le voyez cette fonction créer et mettre à jour le compte de développeur, mais je dois enregistrer tous les types d'agents [admin, développeur, support], je tente cette :
public String createAgentAccount(Model model, ... , @ModelAttribute("agent") Agent developer, BindingResult result) {.....}
Mais je reçois cette erreur:
Tue Aug 22 19:54:03 WEST 2017
There was an unexpected error (type=Internal Server Error, status=500).
Failed to instantiate [com.GemCrmTickets.entities.Agent]: Is it an abstract class?; nested exception is java.lang.InstantiationException
Je sais que cela est impossible t o instancier une classe abstraite. Je ne veux pas faire une fonction pour chaque type d'agent, Un pour tous sera la meilleure solution. J'ai donc besoin de votre aide s'il vous plait. Et merci.
pouvez-vous me donner un exemple s'il vous plaît! – Mostafa
J'ai mis à jour le post. – hadilq
oui ça merci :) – Mostafa