h:commandLink条件目标

时间:2011-07-25 13:28:32

标签: java jsf

我有h:commandLink

<h:commandLink value="" 
    actionListener="#{controller.authenticateAccount}" 
    style="text-decoration: none;" 
    target="#{controller.userNameGiven ? '_parent' : '' }">
        <img src="../images/Profile/authenticateCPButton.gif" border="0" style="padding-left: 2px;"/>
</h:commandLink>

现在controller.userNameGiven是一个布尔字段,如果给定用户名,则设置为true,否则设置为false。 h:commandLink出现在iframe中,在此之前,target设置为_parent,然后如果用户名存在则会重定向到同一父窗口中的页面,但是在其他情况下,iframe在父页面中呈现,这显然是一个错误。现在,在目标验证之后,重定向的页面在该iframe中打开,这是不合需要的。我做错了什么?

谢谢和问候。


编辑1:

我已将target更改为:

target="#{controller.target}"

其中:

    public String getTarget() {
        return target;
    }

    public void setTarget(String target) {
        this.target = target;
    }    

if(this.userName != null && this.userName.trim().length()>0) {
            target = "_parent";
            FacesContext.getCurrentInstance().getExternalContext().redirect("./somepage");
} else {
            target = "";
}

但是它仍然无法正常工作,并且网址在iframe中打开了。

1 个答案:

答案 0 :(得分:0)

将逻辑移动到bean方法中:

public class Controller
{
    // ...

    public boolean isUserNameGiven () { /* snip */ }

    public String getFooTarget()
    {
        return this.isUserNameGiven() ? "_parent" : "";
    }

    // ...
}