我在 bean@Stateful
中有一个 EJB @SessionScoped
。
我的 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
}
}
我的会话范围 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 属性但没有要单击的 innerHtml 的标签)。只有在我重新加载页面而不重新提交数据的情况下才能修复它(通过在 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
我曾经调用的 bean sessionBean.selectEntity()
。谁能解释造成这种差异的机制?