<h:link> disabled属性未正确评估</h:link>

时间:2013-09-10 11:28:58

标签: jsf-2 ejb-3.0

我在@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。任何人都可以解释导致这种差异的机制吗?

1 个答案:

答案 0 :(得分:0)

documentation表示该方法返回的对象的“toString”将用于handel导航,您可以尝试返回“”(不导航,只刷新页面)。

请添加xhtml的相关部分。