DataGridでlabelFunctionを指定してあるカラムのソート

itemToLabelを使います。

	var co1:Object;
	var co2:Object;
	if (sortColumn.labelFunction==null) {
		co1 = item1[sortColumn.dataField].toString()
		co2 = item2[sortColumn.dataField].toString()
	} else {
		co1 = sortColumn.itemToLabel(item1);
		co2 = sortColumn.itemToLabel(item2);
	}

注意としては、itemToLabelは、Stringを返すので、
合計のlabelFunctionだったりする場合は、数値の比較ファンクションが必要です。

ObjectUtil.numericCompare(n1,n2);

とかですね。

SparkのDataGridの横スクロール2

Flex SDK4.6

sparkのDataGridの横スクロールのイベントを拾いたい場合は、

dataGrid.scroller.horizontalScrollBar.addEventListener(Event.CHANGE, onDataGridHorisontalScrollChange)

で、イベントが取得できます。

protected function onDataGridHorisontalScrollChange(event:Event):void {
    trace(dataGrid.grid.horizontalScrollPosition);
}

で、その時の、Positionが取れます。

ただ、説明しにくいのですが、
・ItemEditorを使用。
・そのItemEditorがGridの端のほうにある。
・そのItemEditorの編集セッションがスタートする。
すると、DataGridが、編集対象のItemEditorを全て表示する為、勝手にスクロールしてくれます。
この時、horizontalScrollBar(HScrollBar)のCHANGEイベントは、発生しません。
DataGridやらGridやら、DataGridEditorやらのソースを見ると、
GridのscrollToIndexで行なっているようです。
Scrollerがイベントを送出してくれません。

対応したのがコチラ。

dataGrid.grid.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onGridPropertyChange);

PropertyChangeEventをハンドリングします。

protected function onGridPropertyChange(event:PropertyChangeEvent):void {
			if (event.property=="horizontalScrollPosition") {
				trace(event.newValue);
			}
		}

GroupBase - Adobe ActionScript® 3(AS3 Flex)API リファレンス

他のPropertyのChangeイベントも拾ってしまうので、
なるべくPropertyChangeEvent使いたくないんですけどね。
ちょっと他に方法が思いつきませんでした。
まぁ、BindableなPropertyそんなに多くはなさそうなので。

SparkのDropDonwListの背景色

こんな感じ。

<s:DropDownList id="cmb" chromeColor="#FFFF99"/>

Setting the base color on a Spark DropDownList control in Flex 4 | Flex Examples
ここでは、baseColorで設定してますが、
Flex4でも4.6の場合は、chromeColorです。

また、ポップアップされたListの背景色は、contentBackgroundColorになります。

JettyのmaxFormContentSize

以前これにはまって、設定し直してOKだったのですが、
その設定は、jetty-web.xml(WEB-INF)に行なってました。

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="maxFormContentSize">1000000</Set>
</Configure>

その後、色々設定見直して、contexts使わずにWAR放り込み版にしてたのですが、
Jetty/Howto/Configure Form Size - Eclipsepedia
ここを参考に、jett.xml

    <Call name="setAttribute">
      <Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg>
      <Arg>1000000</Arg>
    </Call>

と追加しましたが、これ動きません!!ひたすら20000の制約にかかります。

java.lang.IllegalStateException: Form too large529435>200000

Jettyのバージョンは、8.1.0

また、SolrのJIRAですが、
[SOLR-3159] Upgrade to Jetty 8 - ASF JIRA
ここ参考に

   <Call class="java.lang.System" name="setProperty">
      <Arg>org.eclipse.jetty.Request.maxFormContentSize</Arg>
      <Arg>1000000</Arg>
    </Call>

SystemPropertyでの設定を行いましたが、これも動きません!!(jetty.xmlに追加)
(本家のマニュアルにも例はないですが、「Changing the Maximum Form Size for All Apps in the JVM」とあります)

正直、jetty.xmlに記述するのが正しいか不明ですが、
maxFormContentSizeについては、面倒ですが、jetty-web.xmlに設定するのが確実です。
8.1.0以降だと修正されてるかもです。

Mavenでs2JdbcGen

久しぶりにSeaser2触ってます。
JdbcManager使ってますが、やっぱりEntity自動生成したいですね。
で、パスの問題とかあるので、mavenで実行させます。

pom.xml

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-antrun-plugin</artifactId>
	<executions>
		<execution>
			<id>default-cli</id>
			<configuration>
				<tasks>
					<property name="compile_classpath" refid="maven.compile.classpath" />
					<ant antfile="src/main/resources/s2jdbc-gen-build.xml" target="${ant.target}" inheritRefs="true">
					</ant>
				</tasks>
			</configuration>
		</execution>
	</executions>
</plugin>

s2jdbc-gen-build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="narwhal">

	<target name="init">
		<property name="classpathdir" value="target/classes"/>
		
		<property name="rootpackagename" value="jp.co.nosa1"/>
		<property name="entitypackagename" value="entity"/>
		<property name="javafiledestdir" value="src/main/java"/>
		<property name="javafileencoding" value="UTF-8"/>
		<property name="env" value="ut"/>
		<property name="jdbcmanagername" value="jdbcManager"/>
	
		<taskdef resource="s2jdbc-gen-task.properties" classpath="${compile_classpath}"/>
	</target>

	<target name="gen-entity" depends="init">
		<gen-entity
	      rootpackagename="${rootpackagename}"
	      entitypackagename="${entitypackagename}"
	      javafiledestdir="${javafiledestdir}"
	      javafileencoding="${javafileencoding}"
	      env="${env}"
	      jdbcmanagername="${jdbcmanagername}"
	      classpath="${compile_classpath}"
	      />
	</target>
	
</project>

maven-antrun-pluginで実行

mvn antrun:run -Dant.target=gen-entity


参考:
MavenでS2JDBC-Genを使う - azuki note
maven で s2jdbc-gen - garbagetown