当我尝试使用LinkedHashMap从数据库保存条目时,此问题出现。我不知道xhtml代码在何种程度上起作用,但从表面上看还不错。
问题出在xhtml的这一部分:
class TestClass(){
private val dbh = ClassToTest(mockk())
@Test
fun testMethodA() {
assertEquals(dbh.methodA, 3)
}
}
这是WebRental.java:
<tbody>
<tr>
<td>Movie:</td>
<!--td>
<h:selectOneMenu id="foundmovieid" value="#{webRental.idmovie}">
<f:selectItems id="movieid" value="#{webMovie.get_all_movies()}"></f:selectItems>
</h:selectOneMenu>
</td-->
<td>
<h:selectOneMenu value="#{webRental.idmovie}">
<f:selectItems value="#{webMovie.availableMovies.entrySet()}" var="entry"
itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</h:selectOneMenu>
</td>
</tr>
</tbody>
</table>
<h:commandButton value="Submit" action="#{webRental.save()}"></h:commandButton>
和WebMovie.java,其MoviesFacade具有EntityManager,并且可以保留新的pbject电影(ID,标题,导演的姓名和长度):
public class WebRental {
@EJB
private RentalsFacade rf;
private String iduser;
private String idmovie;
//getters and setters
public List<Rentals> get_all_rents() {
return rf.findAll();
}
public void save() {
try {
rf.Save(iduser, idmovie);
} catch (Exception e) {
}
}
}
在xhtml中,有一个静音的部分,这正是我要做的(获取ID并提交),但是以一种方式,您只能看到ID。未静音部分是我遇到的问题,因为它指出该值无效。
要解决此问题,我必须使用“转换器”吗?如果是这样,我该如何实施?如果没有,我的错误是什么?
此外,在静音部分中,有一个对“ get_all_movies()”的调用,但是由于它已被静音,因此不应调用它。如何在该静音部分之外调用该函数,以便在Map正常工作后获得SelectOneMenu后可以删除整个部分?
答案 0 :(得分:0)
使用“地图”结果很奇怪... 我如何解决此问题的方法是删除大部分SelectItem,以使它成为:
<f:selectItems value="#{webMovie.availableMovies}" />
然后更改将所有内容插入地图的方式,如下所示:
@PostConstruct
public void init() {
availableMovies = new HashMap<>();
mf.findAll().forEach((m) -> {
availableMovies.put((String) m.getTitle() + ", " + m.getDirector() + ", " + m.getLength() + " minutes.",(String) m.getId());
});
//Turns out that, for the selectItems to read properly the map, you have to insert the text you want to be displayed as the key, and then the value as value. I was doing it backwards.
}
那样,我不必依赖调用get_all_movies()的!-d部分,就可以删除它!