- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我使用 <cc:clientBehavior name="chartUpdated" event="change" targets="chartdata"/>
从 Composite Component 发送 ajax 事件时 |我使用 <f:ajax event="chartUpdated" listener="#{bean.updateListener}">
在 Facelet 页面 中捕获它.在 backing bean 中,我捕获类型为 AjaxBehaviorEvent 的事件。
public void updateListener(AjaxBehaviorEvent event){
...
}
我明白我可以扩展 AjaxBehaviorEvent 并在其中传递已更改的对象。 For example, Primefaces's Scheduler uses this approach:
<p:ajax event="eventMove" listener="#{scheduleView.onEventMove}" update="messages" />
和支持bean:
public void onEventMove(ScheduleEntryMoveEvent event) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event moved", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());
addMessage(message);
}
是否可以通过将 Composite Component 与 @FacesComponent 一起使用来实现相同的功能?
提前致谢!
最佳答案
很高兴再次见到你:)
继续您之前的 question :
覆盖 queueEvent()
以过滤有趣的事件(来自特定组件的更改)并将它们的入队推迟到验证阶段,以便能够获取转换和验证的值:
@FacesComponent("rangeComponent")
public class RangeComponent extends UIInput implements NamingContainer
{
private final List<AjaxBehaviorEvent> customEvents = new ArrayList<>();
...
@Override
public void queueEvent(FacesEvent event)
{
FacesContext context = getFacesContext();
if(event instanceof AjaxBehaviorEvent)
{
Map<String, String> params = context.getExternalContext().getRequestParameterMap();
String eventName = params.get("javax.faces.behavior.event");
Object eventSource = event.getSource();
if("change".equals(eventName) && (from.equals(eventSource) || to.equals(eventSource)))
{
customEvents.add((AjaxBehaviorEvent) event);
return;
}
}
super.queueEvent(event);
}
@Override
public void validate(FacesContext context)
{
super.validate(context);
if(from.isValid() && to.isValid())
{
for(AjaxBehaviorEvent event : customEvents)
{
SelectEvent selectEvent = new SelectEvent(this, event.getBehavior(), this.getValue());
if(event.getPhaseId().equals(PhaseId.APPLY_REQUEST_VALUES))
{
selectEvent.setPhaseId(PhaseId.PROCESS_VALIDATIONS);
}
else
{
selectEvent.setPhaseId(PhaseId.INVOKE_APPLICATION);
}
super.queueEvent(selectEvent);
}
}
}
...
}
然后将特定的事件监听器添加到您的托管 bean:
@ManagedBean
@ViewScoped
public class RangeBean implements Serializable
{
private static final long serialVersionUID = 1L;
private String range = "01/01/2015-31/12/2015";
public void onSelect(SelectEvent event)
{
Messages.addGlobalInfo("[{0}] selected: [{1}]", event.getComponent().getId(), event.getObject());
}
public String getRange()
{
return range;
}
public void setRange(String range)
{
this.range = range;
}
}
关于jsf - 如何扩展从@FacesComponent 调度的 AjaxBehaviorEvent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27911696/
这是我的 FacesComponent 类: @FacesComponent("ExibicaoChecklistComponent") public class ExibicaoChecklistC
当我使用 从 Composite Component 发送 ajax 事件时 |我使用 在 Facelet 页面 中捕获它.在 backing bean 中,我捕获类型为 AjaxBehavior
我的印象是 CDI 不适用于具有 @javax.faces.component.FacesComponent 的类。 .这是真的? 这是我的例子,这不起作用。 MyInjectableClass用于代
我正在尝试扩展 JSF 的组件类(让它成为 h:panelGroup 之一)并通过复合组件呈现它: 第一步: @FacesComponent(value="customPanel") public c
我不知道是否有解决的问题。如果是这样,我找不到它。 我正在创建一个复合组件,其中包含两个触发事件的 SelectOneMenu。 问题是该组件在一个 jsf 中有效,但在其他 jsf 中无效。 该组件
我想创建一个自定义 JSF 2.0 组件,但无法让它工作。我的组件是这样定义的: @FacesComponent(value = "myCustomComponent") public class
我是一名优秀的程序员,十分优秀!