当前位置: 首页 > 知识库问答 >
问题:

JSF/Primefaces span onClick会自动调用支持Bean

龙德海
2023-03-14

我正在用JSF做一个项目,遇到了以下问题。

当我创建以下跨度时:

<ui:composition>
    <div id="header" class="header">
        <p style="float: right; padding-right: 20px">
            Welcome, #{infoGet.username} <span class="glyphicon glyphicon-off" style="color: darkred; cursor: pointer;" onclick="#{Login.logout()}" />
        </p>
    </div>
</ui:composition>

它调用这个方法logout()

public void logout() {
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
    try {
        FacesContext.getCurrentInstance().getExternalContext().redirect("Landing.xhtml");
    } catch(IOException e) {
        e.printStackTrace();
    }
}

然而,在页面加载时,跨度内的onClick会被自动调用,如果我这样做:

public void logout() {
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
}

并刷新页面,会话将无效。

有没有办法从span中调用方法“onClick”?我确实需要它是一个标签,这样我就可以正确使用引导图标元素。我知道onClick通常用于Javascript,但它与JSF一起使用似乎是合乎逻辑的。

编辑与解决方案通过@luiggi-mendoza

将组成更改为:

<ui:composition>
    <div id="header" class="header">
        <h:form style="float: right; padding-right: 20px">
            <h:commandLink action="#{Login.logout()}" styleClass="clearCommand">
                <span class="glyphicon glyphicon-off" style="color: darkred; cursor: pointer;" />
            </h:commandLink>
        </h:form>
        <p style="float: right; padding-right: 20px">
            Welcome, #{infoGet.username}
        </p>
    </div>
</ui:composition>

明确命令:

#clearCommand {
    cursor: pointer;
}

保持登录状态,现在一切都解决了。

共有1个答案

子车灿
2023-03-14

您不应该将任何表达式语言直接调用到非JSF组件中。你要找的是

<h:form>
    <h:commandLink action="#{Login.logout()}" styleClass="foo">
        <span style="...">logout</span>
    </h:commandLink>
</h:form>

其中foo是一个CSS类,您可以在其中清除

 类似资料:
  • 背景: 我有一个支持bean,它有上传方法,可以在上传文件时监听。现在我将这个文件传递给解析器,并且在解析器中对csv文件中存在的行进行验证检查。 若验证失败,我必须记录信息并保存在数据库的日志表中。 我的最终目标: 就是在日志bean中获取会话信息,这样我就可以获取并调用将数据保存到数据库中。 正在发生什么: 在我的上传支持bean中,我正在获取会话,但当我调用解析器时,我不会传递会话信息,因为

  • null null null 道: 处理与业务逻辑层的所有交互的非bean对象。它加载数据bean并准备提交,等等。我通常把它作为一类公共静态方法。 转换器、验证器: null 这似乎是一般JSF应用程序所需的全部内容。我已经阅读了以下内容:http://java.dzone.com/articles/making-distinctions-between,以及这里的回复:JSF backing

  • 问题内容: 我收到以下消息: [#| 2010-07-30T11:28:32.723 + 0000 |警告| glassfish3.0.1 | javax.faces | _ThreadID = 37; _ThreadName = Thread-1; |将不可序列化的属性值设置为ViewMap:((键:MyBackingBean,值类:foo.bar.org.jsf.MyBackingBean)|

  • 问题内容: 我已经根据许多教程之一创建了自定义 JSF 组件(我正在使用 PrimeFaces ),并添加了一个参数,该参数已成功传递给组件。 但是我需要自定义类型的参数,而这是我在教程中找不到的,它们只处理最简单的情况。 Bean返回类型为 Image 的对象,但未调用setter。我期望这会起作用,因为否则,一个好的教程应该提到这种情况,但是现在我陷入了更严重的错误:什么也没有发生,并且日志中

  • 我寻找过根据textView的大小自动拟合字体的解决方案,找到了很多,但没有一个支持多行并且正确地做到这一点(不截断文本,也尊重重力值)。 有没有其他人进行过这样的解决方案?

  • 问题内容: 我正在尝试编写一个渲染器,该渲染器将处理组件上的属性。在阅读了JSF2.0并去除了必需的HTML5属性之后,我走了这条路,这似乎是正确的。这是我的自定义渲染器 并且此渲染器在faces config中注册为 这被注册罚款,那里没有问题。 我的意图是处理该属性,将其插入,然后将处理委托给super。我上面的代码不起作用,因为我在错误的位置插入了属性。必须在执行后将其插入。但是,start