私は自分の 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
?
よろしくお願いします。