gpt4 book ai didi

java - 使用相同的方法返回多个列表 Spring MVC

转载 作者:行者123 更新时间:2023-12-02 02:31:35 25 4
gpt4 key购买 nike

我遇到了一个看似很容易解决的问题,但它却表现出了韧性。也就是说,我正在制作一个具有模糊搜索功能的网络平台。现在,搜索应该返回对象列表(在我的例子中都是模型),并在屏幕上的单独选项卡中显示它们。

BlurrySeach(用于个人资料):

public List<Profile> blurrySearch(String keyword) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("select p from Profile p where p.username LIKE :keyword order by p.username");
query.setParameter("keyword", "%" + keyword + "%");
List<Profile> profileList = query.list();
session.flush();
return profileList;
}

此方法是接口(interface)的实现:

  List<Profile> blurrySearch(String title);

现在,我找不到重载此方法的方法,因为更改了 List<Profile>List<Photos>不会更改重载方法所需的返回类型或参数列表。将接口(interface)更改为List blurrySearch(String title)也没有改变任何东西。制作 blurrySearchProfile 的效率很低。 , blurrySearchPhotos , blurrySearchBlogs , blurrySearchShops等作为单独的方法。如何重载此方法以返回 5 个列表,例如 profileList将其传递给controller然后将其渲染在jsp上?

这是 JSP 代码:

<div class="container-wrapper">
<div class="container">
<div class="page-header">
<h1>Explore</h1>
<p class="lead"> Search results! </p>
</div>


<!--

<div style=" width: 75%; margin: 0 auto;">
<div class="galleryImage">
<c:forEach items="${profileList}" var="profile">
<div class="imageWrapper">

<a href="<spring:url value="/users/${profile.username}"/>"
style="max-height: 25%; max-width:25%; left: 50%;">

<img src="<c:url value="/resources/images/cosplay/profilePhotos/${profile.username}-prof.png"/>" alt="image"
style="max-height: 90%; max-width:90%; display: block; margin-left: auto; margin-right: auto;">
</a>
<div style="text-align:center;">
<h3>${profile.username}</h3>
</div>
</a>
<hr>
<h3>${profile.description}</h3>
</div>
</c:forEach>
</div>

</div> -->


<div class="w3-bar w3-black">
<button class="w3-bar-item w3-button" onclick="openTab('Photos')">Photos</button>
<button class="w3-bar-item w3-button" onclick="openTab('Profiles')">Profiles</button>
<button class="w3-bar-item w3-button" onclick="openTab('Tutorials')">Tutorials</button>
<button class="w3-bar-item w3-button" onclick="openTab('Blogs')">Blogs</button>
<button class="w3-bar-item w3-button" onclick="openTab('Shops')">Shops</button>
</div>
<!-- START PHOTOS -->
<div id="Photos" class="tab">
<h3>Photos</h3>
</div>
<!-- END PHOTOS -->

<!-- START PROFILES -->
<div id="Profiles" class="tab">
<h3>Profiles</h3>
</div>
<!-- END PROFILES -->

<!-- START TUTORIALS -->

<div id="Tutorials" class="tab">
<h3>Tutorials</h3>
</div>

<!-- END TUTORIALS -->

<!-- START BLOGS -->
<div id="Blogs" class="tab">
<h3>Blogss</h3>
</div>
<!-- END BLOGS -->

<!-- START SHOPS -->
<div id="Shops" class="tab">
<h3>Shops</h3>
</div>
<!-- END SHOPS -->


</div>
</div>

提前谢谢您!

最佳答案

我们也遇到了类似的问题。为了解决这个问题,我们在 spring xml 中维护了 2 个映射

<util:map id="entityToTableMap">
<entry key="Photos" value="tbl_photos"/>
<entry key="Profiles" value="tbl_profiles"/>
<entry key="Blogs" value="tbl_blogs"/>
</util:map>
<util:map id="entityToSearchFieldsMap">
<entry key="Photos" value="field_name"/>
<entry key="Profiles" value="username"/>
<entry key="Blogs" value="field_name"/>
</util:map>

我们创建了一个像这样的存储库方法

@Value("#{entityToTableMap}")
private Map<String, String> entityToTableMap;

@Value("#{entityToSearchFieldsMap}")
private Map<String, String> entityToSearchFieldsMap;

public List<T> blurrySearch(String keyword,String entityType) {
String tableName = entityToTableMap.get(entityType);
String searchField = entityToSearchFieldsMap.get(entityType);
String sql ="select p from "+tableName+" p where p."+searchField+" LIKE :keyword order by p."+searchField
...
}

但是,在jsp上,我们无法找出需要访问的字段。因此,我们使用了jdbctemplate的queryForList方法,如下

  @Autowired
JdbcTemplate jdbcTemplate;

public List<Map<String, Object>> blurrySearch(String keyword,String entityType) {
String tableName = entityToTableMap.get(entityType);
String searchField = entityToSearchFieldsMap.get(entityType);
String sql ="select p from "+tableName+" p where p."+searchField+" LIKE ? order by p."+searchField
return jdbcTemplate.queryForList(sql, new String[]{"%"+keyword+"%"});
}

然后在 jsp 上,我们使用类似的东西来使其通用

<c:forEach items="${entityList}" var="maps">
<c:forEach items="${maps}" var="mapEntry">
${mapEntry['username']}
</c:forEach>
</c:forEach>

关于java - 使用相同的方法返回多个列表 Spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47006035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com