Pessoal, tenho uma dúvida: Estou usando SPRING MVC com Spring Data, implementei os controllers e os repositórios herdando de JPARepository. Não implementei os métodos do JPARepository, deixando-os no padrão.
No meu modelo tenho o seguinte:
@Entity
public class Name{
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@NulNull @NotEmpty
private String myName;
//Getters and Setters
}
@Entity
public class B{
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@NotNull @NotValid
private int bName;
private int nextB;
}
Com a qual quero criar uma lista de B's onde os nomes dos B's estão numa tabela Name e cada B aponta para essa tabela, não repetindo assim os nomes dos B's.
No meu controller, tenho o seguinte:
@Controller
public class GeneralController{
//Consider I have a package repository into package project where I extend BRepository and NameRepository interfaces from JPARepository correctly (I can persist B or name in a independent form)
@Autowired
BRepository allBs;
@Autowired
NameRepository allNames;
@GetMapping("create") ModelAndView getCreationPage(Name n, B b){
ModelAndView mv = new ModelAndView("formCreate");
//Consider I have a JSP file 'formCreate.jsp' into webapp/WEB-INFO/jsp like we learn in this course
mv.addObject("name", n);
mv.addObject("b", b);
return mv;
}
@PostMapping("create") ModelAndView addFirstB(@Valid Name n, @Valid B b){
ModelAndView mv = new ModelAndView("formCreate");
//------------------------------------------
//What I want to do here:
allNames.save(n); //now n have an Id
b.setBName(n.getId()); //now B points to its name in table name
b.setNextB(null); //next is null, because this is the first
allBs.save(b);
//-------------------------------------------
return mv;
}
}
Como deve ser meu input no "formCreate.jsp"?
<form name="create" method="POST">
<label for="b">Name of b:</label><br/>
<input type="text" name="myName"/>
<button type="submit" action="/">Submit</button>
</form>
E como eu faria isso com Thymeleaf? E suponha que agora eu tenho um atributo String color em B. E se eu quiser setar o name de n e o color de b no mesmo formulário, como faço para capturar isso no JSP e no Thymeleaf?
Pensei em algo como:
<form name="create" method="POST">
<label for="b">Name of b:</label><br/>
<input type="text" value="${n.myName}"/>
<input type="text" value="${b.color}"/>
<button type="submit" action="/">Submit</button>
</form>
Mas retorna erro de que o elemento não pode ser nulo. É urgente. Poderiam me ajudar?