java
原因は、IntelliJがbuild.gradleのタスクを読み込んでないことだった。 Tool Windows > gradleからGradle task viewを表示し、Refreshしたら直った。 参考: stackoverflow.com
Servletクラスのフィールドで@Injectアノテーションを使ってオブジェクトを詰めているところで エラーが発生した。 原因はCDIのバージョンがビルド時と実行環境で異なることが原因(たぶん) JavaEE7環境では動かなかったけど、JavaEE6環境で動かすと動いた…
以下のコマンドで生成したJARの中のクラスがdefault packageに入ってしまっていた。 wsimport -clientjar api.jar IF.wsdl macでJDK1.8に入っているwsimportを使った場合は大丈夫だったが、windowsでJDK1.7に入っているwsimportを使った場合、同じコマンドを…
Eclipse全体の設定は以下のように行う。 Eclipse メニューから「ウィンドウ」>「設定」を選択し、「設定」ダイアログを開きます。 「Java」>「コンパイラー」を選択し、表示された画面で「コンパイラー準拠レベル」を選択します。 但し、既に作成済みのプロ…
以下のコマンドで削除出来る。 sudo rm -rf /Library/Java/JavaVirtualMachines/jdk<version>.jdk sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin sudo rm -rf /Library/LaunchAg</version>…
以下のようにjavapコマンドでバージョンを出力できるので、grepで絞って出すと確認出来る。 javap -v HelloWorld | grep major 参考: d.hatena.ne.jp
原因はTomcatが使っているJVMのバージョンで実行出来るJavaのバージョンとコンパイル時に使ったJavaのバージョンが異なるため。 具体的にはコンパイル時はJDK1.8を使っていたがTomcatはJDK.7を使っていたためエラーが出た。 Unsupported major.minor version…
元々JDK1.7を使っていたが、1.8に変更したくなった。 JDK1.8をインストールしただけでは変更されなかった。 JAVA_HOME環境変数をJDK1.8のパスに変更するとJavaバージョンが変わった。 例えば、以下のように設定する。 JAVA_HOME=%ProgramFiles%\Java\jdk1.8.…
具体的には以下の現象が起きた。 Editorエリアのはじっこ(ガター)のところに更新した行かどうかが表示されなくなる。正確には変更してすぐは表示されるけど、Diskに保存されたら表示されなくなる Version Control windowに変更したファイルの一覧は出るが…
標準のdark theme(名前はDelucaだったかな?)にしているとEditorのアクティブタブがどれかわかりにくくて困っていたので もっとわかりやすい色にする設定はないか調べてみた。 Preferences > Appearance & Behavior > File Colors で+ボタンを押し、Scope…
以下のようにf:attributeタグを使ってオブジェクトをValidatorに渡せる。 <h:inputText> <f:validator validatorId="validateEmail" /> <f:attribute name="foo" value="bar" /> </h:inputText> Validatorのコードでは以下のようにしてオブジェクトを取得する。 @Override public void validate(final FacesContext context, final UIComponent component, final Object val…
以下のように例外をキャッチして判定するしかないっぽい。tryParse的なメソッドがあるのかと思ったけど。。無いならしょうがない。 try { new BigDecimal("some string"); // This do nothing because the instance is ignored } catch (NumberFormatExcepti…
メッセージは以下。 Warning:(11, 1) java: Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)'…
以下のようなEJBクラスがあったとする。 @Singleton public class Beans { .... } 以下のように@EJBをつけてオブジェクトをinjectしようとすると、「com.ibm.wsspi.injectionengine.InjectionException: CWNEN0030E」エラーが発生した。 @ManagedBean @ViewS…
句読点や中黒などはシンボル名に使えない。テストメソッド名を日本語で書いてると句点と中黒は結構使いたくなるんだけどな。。 使えない文字一覧は以下のサイトにある。 参考:
Javaはメソッド名等に日本語が使えるが、使うと以下の問題がある。 コード補完が効きづらくなる 同じ文字で文字コードが違うことがあるので、エディタ上では全く同じ変数名に見えて実際は違う変数ということがありえる。 例えば、「グ」という文字は「グ」一…
JSファイルに以下を書く。 window.my = {}; window.my.onkeypress = function() { var ENTER_KEY_CODE = 13; // ENTERが押下された場合、ソフトウェアキーボードを閉じる if (event.keyCode == ENTER_KEY_CODE) { document.activeElement.blur() } // ENTER…
FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest() で判定できる。 FacesContext.getCurrentInstance().isPostback()もたまに使う。 参考:
DOMParser p = new DOMParser(); のようなコードを書くとコンパイル時に警告が出た。 DOMParserは内部所有のAPIであり、今後のリリースで削除される可能性があります 以下のようにDocumentBuilderFactoryを使うといい。 DocumentBuilderFactory dbFactory = …
Unchecked cast警告が出たら普通は以下のようにinstanceofで型チェックしてからCastするよう修正する。 if (obj instanceof String) { return (String) obj; } でも型パラメータはコンパイル後に消えるのでinstanceofで厳密に型チェックできない if (obj ins…
以下の手順で変更出来る。 src/main/resources 下にJsfStandardMessage.propertiesのような名前でプロパティファイルを置く faces-config.xmlに以下を追加 <message-bundle>JsfStandardMessage</message-bundle> JsfStandardMessage.propertiesに「javax.faces.converter.IntegerConverter.INT…
以下のようにInteger型のmonthフィールドをbindした場合、画面から入力値を空にしてもmonthには0が入ったままになり、nullにはならない。 <h:inputText id="month" value="#{controller.month}" styleClass="inputText inputText-date"> <f:ajax execute="#{execute}" event="change" /> </h:inputText>月 原因はEL parserのバグで、EL parser内では値をintで扱っているので、nullを0に変換しているから。 以下のJVM O…
add, setなどのメソッドの引数としてCalendar.HOURなどを渡すが、HOURとHOUR_OF_DAYの違いは以下。 ・HOURは12時間表記での時刻 ・HOUR_OF_DAY24時間表記での時刻 HOURを使った場合、午前か午後かはどうやって指定するんだよ。。という気がするが、そこは変…
バリデーションエラーになったらCompositeComponentのgetConvertedValueメソッドは呼ばれないと思っていたら、呼ばれた。まじか。。 以下のようにisValidationFailedをチェックした方が良さそう。 @Override protected Object getConvertedValue(final Faces…
f:attribute経由で渡せる。以下のようにxhtmlを書くと、 <h:inputText> <f:validator validatorId="validateEmail" /> <f:attribute name="foo" value="#{controller.foo}" /> </h:inputText> Validatorのvalidateメソッドで以下のようにして値を受け取れる。 String foo = component.getAttributes().get("foo"); 参考:
以下のようにcomposite component内に<f:event listener="#{cc.validate}" type="postValidate" />を入れてもlistenerが呼ばれなかった。 </f:event>
原因はバリデーションエラーメッセージを表示するh:messageタグがrenderで指定されていないこと。 以下のようにf:ajaxタグのrenderでh:messageのidを指定すると表示された。 <h:inputText id="text3" value="#{bean.text3}"> <f:validateRegex pattern="[A-Z][a-zA-Z]*" /> <f:ajax event="keyup" render="text3message" /> </h:inputText> <h:message id="text3message" for="text3" /> 参…</h:message>
スペース区切りでidを複数書くとそれぞれ更新される。executeなどrender以外も同じ仕様っぽい。 <f:ajax execute="search_form" render="linear1 linear2"/> 参考:</f:ajax>
ViewScopeでやたらハマるので落とし穴をまとめた。 リクエスト毎にインスタンスが再生成される ViewScopeなのでURLが変わらないうちはインスタンスはずっと保持されるんだろうと思ったら、そうではないっぽい。 初回表示のGET時とPOST BACK時でBacking Bean…
ViewScopeのBeanを使う場合の注意点。JSF2.0での話なので2.2などでは違うかも。 ・@Namedでなく@ManagedBeanを使う。例は以下。 @ManagedBean @ViewScoped public class ViewController implements Serializable ... ・ViewScopeのBean及びそのインスタンス…