【zk開発】ページでcomposerオブジェクトを取得する方法

2748 ワード


サンプル:
 
 
<window id="userWin"  apply="org.sunflower.web.controller.zk.UserController">

 :<button label=" ..." upload="true,maxsize=-1,native" 

onUpload="userWin$composer.handleUploadLogo(event.media)"/>

</window>
 
 
 
UserControllerコード、GenericComponentまたはそのサブクラスを継承
 
 
import org.zkoss.util.media.Media;
import org.zkoss.zk.ui.util.GenericComposer;

public class UserController extends GenericComposer {
	private static final long serialVersionUID = -3801962286418473844L;

	public void handleUploadLogo(Media media) {
		System.out.println(media.getName());
	}
}

 
 
 
質問:
 
userWin$composer変数はどこから来ますか?
 
 
GenericComponent部分ソースコード
 
 
abstract public class GenericComposer extends GenericEventListener
implements Composer, ComposerExt, java.io.Serializable {
.....................................
 // comp apply=“xxx.xxx.XXXcomposer” 
//since 3.6.1
	public void doBeforeComposeChildren(Component comp) throws Exception {
		//assign this composer as a variable
		//feature #2778508
		Components.wireController(comp, this); // wireController 
	}

  ................................

}

 
便宜上、以下に○○類のソースコードを一つ一つ説明せず、関連ソースコードのみを貼り付ける
 
 
1,
 
public static final
	void wireController(Component comp, Object controller, char separator) {
		new Wire(controller, separator).wireController(comp, comp.getId());// 
	}
 
 
 
 
 
 
2、それから次のコードを見て、すべてが明らかになりました.
 
 
/**
		 * Inject controller as variable of the specified component.
		 */
		private void wireController(Component comp, String id) {
			//feature #2778513, support {id}$composer name
			final String composerid =  id + _separator + "composer";
			if (!comp.hasAttributeOrFellow(composerid, false)) {
				comp.setAttribute(composerid, _controller);
			}
			comp.setAttribute(varname(id, _controller.getClass()), _controller);
		}
 
解釈コード
 
 
まずcomposerid文字列をつなぎ、composeridはcomp.getId、_seperator、「composer」構成
そのうち_seperatorの値はデフォルト$です.もちろんComponentsのようなものを使用できます.wireController(comp, controller, separator);
3番目のパラメータを指定する方法でデフォルト$を変更します.