我在@Stateful
bean中有一个@SessionScoped
EJB。
我的EJB:
@Stateful
public class SomeEjb implements someEjbInterface{
private SomeEntity entity;
@Override
public Boolean getEntityAssigned(){
return entity!= null;
}
@Override
public void selectEntity(String id){
//assign entity with some values retrieved from db according to the criteria
}
}
My Session Scoped Bean:
@ManagedBean
@SessionScoped
public class SessionBean{
@EJB
private SomeEntity entity;
//getter and setter
public String selectEntity(){
entity.selectEntity(someId);
return null;
//Edited: if using this, no problem will occur.
// return "index";
}
}
我的页面index.xhtml(省略xmlns):
<h:form>
<h:commandButton value="Select entity" action="#{sessionBean.selectEntity()}">
</h:form>
<h:link outcome="someOutcome" disabled="#{sessionBean.entity.entityAssigned}">
我希望链接最初被禁用,当我点击“选择实体”时,ejb将从数据库中检索实体,如果检索成功,则链接将被启用。
问题是当我单击按钮时,链接将中断(呈现带有href属性但没有内部HTML的标记)。只有在没有数据重新提交的情况下重新加载页面才能修复它(通过在URL上按Enter键重新进入页面,而不是使用将重新提交表单的F5)。
错误消息是:
HTML nesting warning on closing span: element a rendered by component : {Component-Path : some long component path refer to the link element} not explicitly closed
有谁知道我搞砸了什么?
编辑:
我刚刚发现,如果我返回同一页面的结果而不是null,则该问题不存在,这可能会丢弃我曾经称之为@ViewScoped
的{{1}} bean。任何人都可以解释导致这种差异的机制吗?
答案 0 :(得分:0)
documentation表示该方法返回的对象的“toString”将用于handel导航,您可以尝试返回“”(不导航,只刷新页面)。
请添加xhtml的相关部分。