[SPRING] 매개 변수 객체 속성
SPRING매개 변수 객체 속성
누군가가 나에게 봄 mvc에서 하이퍼 링크에서 매개 변수를 기반으로 변경 개체 속성을 가지고 코드 효율적인 방법을 보여줄 수 있습니까?
"소유자"세부 정보 페이지가 특정 "소유자"가 소유 한 "애완 동물"의 각 유형별 목록을 표시 할 수 있도록 봄 Petclinic 샘플 응용 프로그램을 수정합니다. 현재 "애완 동물"목록은 각 "소유자"의 속성이며 jstl에서 owner.pets로 액세스 할 수 있습니다. 내가 원하는 건 내 jstl 코드가 jstl에서 owner.cats, owner.dogs, owner.lizards 등을 호출하고 웹 페이지의 다른 부분에 여러 개의 개별 목록을 채울 수 있다는 것입니다. 모든 고양이, 개 , 도마뱀은 동일한 기본 데이터 테이블에 저장됩니다.
어떻게해야합니까?
JpaOwnerRepositoryImpl.java의 관련 메소드는 다음과 같습니다.
@SuppressWarnings("unchecked")
public Collection<Owner> findByLastName(String lastName) {
// using 'join fetch' because a single query should load both owners and pets
// using 'left join fetch' because it might happen that an owner does not have pets yet
Query query = this.em.createQuery("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets WHERE owner.lastName LIKE :lastName");
query.setParameter("lastName", lastName + "%");
return query.getResultList();
}
@Override
public Owner findById(int id) {
// using 'join fetch' because a single query should load both owners and pets
// using 'left join fetch' because it might happen that an owner does not have pets yet
Query query = this.em.createQuery("SELECT owner FROM Owner owner left join fetch owner.pets WHERE owner.id =:id");
query.setParameter("id", id);
return (Owner) query.getSingleResult();
}
다음은 Owner.java의 관련 측면입니다.
@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner")
private Set<Pet> pets;
protected Set<Pet> getPetsInternal() {
if (this.pets == null) {this.pets = new HashSet<Pet>();}
return this.pets;
}
public List<Pet> getPets() {
List<Pet> sortedPets = new ArrayList<Pet>(getPetsInternal());
PropertyComparator.sort(sortedPets, new MutableSortDefinition("name", true, true));
return Collections.unmodifiableList(sortedPets);
}
다음은 url 패턴 "/ 소유자"를 관리하는 OwnerController.java의 일부입니다. 여기에서 jstl이 고양이, 개, 도마뱀 등을 페이지의 별도 부분에 나열 할 수있게하려는 경우 (그룹화 된 목록 하나가 아닌 몇몇 별개의 목록에서.) :
@RequestMapping(value = "/owners", method = RequestMethod.GET)
public String processFindForm(@RequestParam("ownerID") String ownerId, Owner owner, BindingResult result, Map<String, Object> model) {
Collection<Owner> results = this.clinicService.findOwnerByLastName("");
model.put("selections", results);
int ownrId = Integer.parseInt(ownerId);
model.put("sel_owner",this.clinicService.findOwnerById(ownrId));
return "owners/ownersList";
}
해결법
-
==============================
1.non-verbose 솔루션을 요청한 이래로 이런 종류의 반쯤 수정을 할 수 있습니다.
non-verbose 솔루션을 요청한 이래로 이런 종류의 반쯤 수정을 할 수 있습니다.
@Transient private Set<Pet> cats = new HashSet<Pet>();
[...]
// Call this from OwnerController before returning data to page. public void parsePets() { for (Pet pet : getPetsInternal()) { if ("cat".equals(pet.getType().getName())) { cats.add(pet); } } } public getCats() { return cats; }
[...] <h3>Cats</h3> <c:forEach var="cat" items="${owner.cats}"> <p>Name: <c:out value="${cat.name}" /></p> </c:forEach> <h3>All pets</h3> [...]
/** * Custom handler for displaying an owner. * * @param ownerId the ID of the owner to display * @return a ModelMap with the model attributes for the view */ @RequestMapping("/owners/{ownerId}") public ModelAndView showOwner(@PathVariable("ownerId") int ownerId) { ModelAndView mav = new ModelAndView("owners/ownerDetails"); Owner owner = this.clinicService.findOwnerById(ownerId); owner.parsePets(); mav.addObject(owner); return mav; }
from https://stackoverflow.com/questions/20292152/parameterizing-object-properties by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Rest에서 모든 요청 - 응답을 기록하는 방법은 무엇입니까? (0) | 2019.01.25 |
---|---|
[SPRING] 스프링 부트 어떻게 jar 파일 외부의 특성 파일을 읽는가? (0) | 2019.01.25 |
[SPRING] 두 변수를 추가 한 후 BeanCreationException 발생 (0) | 2019.01.25 |
[SPRING] 스프링 데이터 Jpa로 멀티 테넌시를 사용하는 방법 (0) | 2019.01.24 |
[SPRING] 봄, 최대 절전 모드 - 다 대다 - LazyInitializationException (0) | 2019.01.24 |