我有一个复合组件:
<cc:interface componentType="com.example.MyComponent">
<!-- ... -->
</cc:interface>
<cc:implementation>
<f:phaseListener binding="#{cc}"/>
<div id="#{cc.clientId}">
<!-- ... -->
</div>
</cc:implementation>
及其类:
@FacesComponent("com.example.MyComponent")
public class MyComponent extends UIOutput implements NamingContainer, PhaseListener
{
@Override
public String getFamily()
{
return "javax.faces.NamingContainer";
}
@Override
public PhaseId getPhaseId()
{
return PhaseId.ANY_PHASE;
}
@Override
public void beforePhase(PhaseEvent event)
{
// Do something ...
}
@Override
public void afterPhase(PhaseEvent event)
{
// Do something ...
}
}
在任何情况下都不会调用beforePhase(PhaseEvent)
norafterPhase(PhaseEvent)
方法,无论是完整还是部分页面加载。
我在这里注意到这个错误:http: //java.net/jira/browse/JAVASERVERFACES-1200,但它似乎已经在很久以前修复了。
我在 Java 6u33 x64 上使用 GlassFish 3.1.2.2。