当前位置: 首页 > 面试题库 >

参数化对象属性

沈建柏
2023-03-14
问题内容

有人可以给我展示一种代码有效的方法,以
根据从超链接发送给它的参数在spring mvc中更改对象属性吗?

我正在修改spring 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);
}

这是OwnerController.java的一部分,用于管理url模式“ /
owners”,我希望我的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";
}

问题答案:

由于您要求的是非详细的解决方案,因此您可以进行这种半脏的修复。

Owner.java

@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;
}

ownerDetail.jsp

[...]
<h3>Cats</h3>
<c:forEach var="cat" items="${owner.cats}">
    <p>Name: <c:out value="${cat.name}" /></p>
</c:forEach>

<h3>All pets</h3>
[...]

OwnerController.java

/**
 * 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;
}

更改的屏幕截图



 类似资料:
  • 我对班级结构有如下建议: @JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.PROPERTY,PROPERTY=“type”) 上面的类被序列化为json元素数组,但是当我反序列化它们时,我想要如下结构: 公共阶层结构{ 是否可以将testA、testB和testC类型的元素数组转换为FlatStructure类的属性?

  • 为什么打字稿ES6没有检测到对象不是函数? 基于此函数,您会假设这将失败: 因为没有sortQuery对象,而是回调函数。这并没有给我任何类型的错误,这意味着typescript允许回调作为对象类型。 如何确保这会导致错误?

  • 问题内容: 我有这个C#对象: 我需要对其进行JSON序列化以在ajax调用中传递给浏览器。我使用JavascriptSerializer,但是它序列化为以下JSON: 但我需要的是: 函数定义周围没有引号。 现在,当JSON对象到达浏览器并被创建时,“ callback”参数不是函数而是字符串。任何想法如何解决它,最好是在服务器端? 问题答案: 此行为是故意的。JSON不应包含任何非数据的内容-

  • 我当前正在尝试使用脚本列出远程计算机上已安装的程序。 我不仅要捕获远程程序列表,而且要捕获一个系统直接向前的版本。 但是,当我在多个系统中循环时,就会完全丢失和字段。