0

我在 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()。谁能解释造成这种差异的机制?

4

1 回答 1

0

文档说该方法返回的对象的“toString”将用于处理导航,您可以尝试返回“”(无导航,仅刷新页面)。

请添加xhtml的相关部分。

于 2013-09-10T11:43:37.003 回答