2016-11-20 36 views
0

我不能得到一个f:ajax侦听器在最简单的JSF 2.2页面上工作。值被分配,但听者是耳聋的。奇怪的是,如果我将h:selectOneRadio替换为h:selectOneMenu,那么相同的代码工作得非常好。下面是HTML:奇怪的问题与h:selectOneRadio在Apache Tomee 7.0.1

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:f="http://xmlns.jcp.org/jsf/core" 
     xmlns:h="http://xmlns.jcp.org/jsf/html"> 

<h:head> 
    <title>Test</title> 
</h:head> 
<h:body> 
    <h:form id="f" > 
    <h:selectOneRadio id="r" value="#{test.mode}"> 
     <f:selectItem itemValue="One"/> 
     <f:selectItem itemValue="Two"/> 
     <f:selectItem itemValue="Three"/> 
     <f:ajax render="@form" execute="@form" listener="#{test.listener2()}"/> 
    </h:selectOneRadio> 
    <br/> 
    <h:outputText id="out" value="#{test.mode}"/> 
    </h:form> 
</h:body> 
</html> 

和bean:

@Named 
@SessionScoped 
public class Test implements Serializable { 

    private final static Logger LOG = Logger.getLogger(Test.class.getName()); 

    private String mode; 

    public String getMode() { 
    return mode; 
    } 

    public void setMode(String mode) { 
    this.mode = mode; 
    LOG.info("Mode setter: " + mode); 
    } 

    public void listener1(AjaxBehaviorEvent event) throws AbortProcessingException { 
    LOG.info("Mode listener 1: " + mode); 
    } 

    public void listener2() { 
    LOG.info("Mode listener 2: " + mode); 
    } 

} 

无论听者方法类型都为h:selectOneRadio解雇。把豆做成@ManagedBean并使用不同的ajax事件类型也没有帮助。

将Apache Tomee升级到版本7.0.1(MyFaces 2.2.10,JSF 2.2)后出现此问题。 MyFaces与2.2.11同样存在问题。

Web应用捆绑在一个耳朵里,没有其他的JSF库被加载,没有Primefaces和类似的,没有servlet过滤器,什么也没有 - 一个纯粹的JSF 2.2应用程序。

任何想法?

+0

尝试添加一个明确的事件是'F:ajax' – Kukeltje

+0

@Kukeltje没什么区别,测试其中的大多数。 – Osw

+0

哎呀,我错过了,你已经提到过...对不起......如果我理解正确,调用listener1也不起作用(xhtml中没有括号)?添加“h:messages”时的任何信息?当你在开发模式下运行应用程序时会发生什么? – Kukeltje

回答

2

MyFaces中存在一个错误,将在MyFaces 2.2.12中修复。 如果您需要立即的解决方案,使用MyFaces快照,它们似乎工作正常,只需将它们放在Tomee的lib文件夹中,而不是myfaces-api-*myfaces-impl-*的股票版本。

https://issues.apache.org/jira/browse/MYFACES-4068