JSF页面,为什么不增加bean?

时间:2016-04-07 18:56:42

标签: jsf

我希望每当我点击commandLink时,我都会看到bean.count属性增量。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
   xmlns:h="http://java.sun.com/jsf/html"> 
<h:head>
  <title>test page</title>
</h:head>
<h:body> 
   <h:form>
     <h:commandLink action="#{myBean.inc}" value="Click me"/><br/>
     #{myBean.count} 
   </h:form>
</h:body>
</html> 

使用bean

package com.test;

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class MyBean implements Serializable{
  int count=0;
  public int getCount() {
    return count;
  }
  public void inc(){
    count++;
  }
}

然而,它只在第一次点击时从0增加到1。 谁能告诉我为什么?

2 个答案:

答案 0 :(得分:1)

动作具有you can see here的特殊含义。请改用actionListener并添加ActionEvent参数。

public void inc(ActionEvent event){
  count++;
}
 <h:commandLink actionListener="#{myBean.inc}" value="Click me"/><br/>

答案 1 :(得分:-1)

相同的代码对我来说正常工作:)

package com.test;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class MyBean implements Serializable {
    int count = 0;

    public int getCount() {
        System.out.println("getCount " +count);
        return count;
    }

    public void inc() {
        count++;
        System.out.println("inc " +count);
    }
}

MyBean.xhtml页面

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>test page</title>
</h:head>
<h:body>
    <h:form>
        <h:commandLink action="#{myBean.inc}" value="Click me" />
        <br />
     #{myBean.count} 
   </h:form>
</h:body>
</html>

控制台日志

getCount 0
inc 1
getCount 1
inc 2
getCount 2
inc 3
getCount 3
inc 4
getCount 4
inc 5
getCount 5
inc 6
getCount 6
inc 7
getCount 7
inc 8
getCount 8
inc 9
getCount 9
inc 10
getCount 10
inc 11
getCount 11
inc 12
getCount 12
inc 13
getCount 13
inc 14
getCount 14
inc 15
getCount 15
inc 16
getCount 16
inc 17
getCount 17
inc 18
getCount 18
inc 19
getCount 19
inc 20
getCount 20
inc 21
getCount 21

测试环境: 面向Web开发人员的Eclipse Java EE IDE。版本:Mars.1 Release(4.5.1),JSF 2.2.4,JDK 1.8.0_73,在IE,Chrome和Firefox上测试过。

检查失败时的情况是否甚至调用inc()方法,如果会话超时或日志文件中有任何消息。