我正忙于编写自己的 JSF2UIComponent
及其相关的渲染器。我所有UIComponent
的工具ClientBehaviorHolder
。我不明白的是如何真正渲染ClientBehaviorHolder
.
例如,以下代码说明了如何ClientBehaviorHolder
在 Mojarra 中呈现。
private static void renderHandler(FacesContext context,
UIComponent component,
Collection<ClientBehaviorContext.Parameter> params,
String handlerName,
Object handlerValue,
String behaviorEventName,
String submitTarget,
boolean needsSubmit,
boolean includeExec)
throws IOException {
ResponseWriter writer = context.getResponseWriter();
String userHandler = getNonEmptyUserHandler(handlerValue);
List<ClientBehavior> behaviors = getClientBehaviors(component, behaviorEventName);
// Don't render behavior scripts if component is disabled
if ((null != behaviors) &&
(behaviors.size() > 0) &&
Util.componentIsDisabled(component)) {
behaviors = null;
}
if (params == null) {
params = Collections.emptyList();
}
String handler = null;
switch (getHandlerType(behaviors, params, userHandler, needsSubmit, includeExec)) {
case USER_HANDLER_ONLY:
handler = userHandler;
break;
case SINGLE_BEHAVIOR_ONLY:
handler = getSingleBehaviorHandler(context,
component,
behaviors.get(0),
params,
behaviorEventName,
submitTarget,
needsSubmit);
break;
case SUBMIT_ONLY:
handler = getSubmitHandler(context,
component,
params,
submitTarget,
true);
break;
case CHAIN:
handler = getChainedHandler(context,
component,
behaviors,
params,
behaviorEventName,
userHandler,
submitTarget,
needsSubmit);
break;
default:
assert(false);
}
writer.writeAttribute(handlerName, handler, null);
}
对于提交处理程序,Mojarra 添加了mojarra.jsfcljs
javascript、UIParameter
s 和其他脚本。对于链处理程序,jsf.util.chain
使用。
我的问题是:
- 如何确定我们是否必须在链中呈现处理程序或单个行为或用户特定的处理程序?
mojarra.jsfcljs
只有莫哈拉独有。PrimeFaces 有自己的实现,Apache Tomahawk 也有。问题是:它mojarra.jsfcljs
的作用是什么,它的用途是什么?这样我就可以自己写一篇了?另外,我在哪里可以找到的实现mojarra.jsfcljs
?- 要渲染的规范是什么
ClientBehaviorHolder
?
提前致以诚挚的感谢。