You need to sign in to do that
Don't have an account?
pikotaro
<apex:inputText> 要素の値は、文字列型として解決する必要があります。
VFページで、<apex:commandButton>でできた保存ボタンをクリックした後、
<apex:pageMessage>に以下が出力されてしまい保存ができません。
「<apex:inputText> 要素の値は、文字列型として解決する必要があります。」
おそらく、あるケースで、ページの一部の項目が、<apex:inputText disabled="true">となるケースがあり、
その時に発生していそうなので(disabled指定が無い場合は保存できます)
保存ボタンクリック時に、disabledを解除するjsをいれましたが、変わらず同じエラーになりました。
原因がわからず困っていますが、なにが原因と考えられますでしょうか。
<apex:pageMessage>に以下が出力されてしまい保存ができません。
「<apex:inputText> 要素の値は、文字列型として解決する必要があります。」
おそらく、あるケースで、ページの一部の項目が、<apex:inputText disabled="true">となるケースがあり、
その時に発生していそうなので(disabled指定が無い場合は保存できます)
保存ボタンクリック時に、disabledを解除するjsをいれましたが、変わらず同じエラーになりました。
原因がわからず困っていますが、なにが原因と考えられますでしょうか。
私の環境では、再現できるのですが、再現環境を作ろうとするとそれができず。。
原因と思われる部分は、◯◯の項目が◯◯になったときで、かつ、
◯◯とは違う別の項目をVFで編集しようとした時に発生するようです。
なにがエラー原因かわからず、debugLogのvisualforceをFINESTにしたりしていますが、
「要素の値は、文字列型として解決する必要があります。」とは表示されますが、エラーの原因は出力されてきません。。
または、BEGIN/END・・・BEGIN/ENDとログに表示されていて、当該文言がでる部分のVF行をみても、なんら問題ありそうにはみえません。
00:11:15.0 (26987216)|VF_EVALUATE_FORMULA_BEGIN|066N00000002J42|#{introWrap.constructionStatus==$Label.NonSending}
00:11:15.0 (27007954)|VF_EVALUATE_FORMULA_END
00:11:15.0 (27452001)|VF_PAGE_MESSAGE|<apex:inputText> 要素の値は、文字列型として解決する必要があります。
00:11:15.0 (27490444)|VF_EVALUATE_FORMULA_BEGIN|066N00000002J42|#{lockedMessage != null}
00:11:15.0 (27509128)|VF_EVALUATE_FORMULA_END
かなり、お手上げなのですが、なにか考えられる原因ありますでしょうか。。
もう、作り直しをして、しかもJSからの更新方式などに変える感じでしょうか。。
ちなみに、2画面から同一レコードに対して、SF標準ページからとVFページから更新かけた際、
SF標準ページでは、同時更新が合った場合ページにメッセージが表示されますが、
VFにも楽観ロックの仕組みをいれまして、同時更新をキャッチしたのでApexpages.addMesssageしてreturn null;すると、VF側でエラーがでてしまうという謎の現象もでています。
同時更新でなければ、return nullしてもエラーにはならないのですが。
ということは、同時更新があった場合、SF側でなんらかキャッチしてVFに伝えてExceptionページになるといった機構が入っているように思えましたが、そういう感じになっているかどうかご存知でしょうか。
そちらも私の方ではあまり聞いたことがないエラーですね。
ちなみにエラーのメッセージは共有頂くことは可能でしょうか。
はい、DmlExceptionのエラーなどではなく、Apexpages.addMesssageしてreturn null;すると、エラーになります。
処理フローは、以下になるのですが、
(1)入力値チェック
正常:(2)へ
異常:Apexpages.addMesssageしてreturn null;
(2)ビジネスロジックチェック(同時更新のチェックもしています。)
正常:(3)へ
異常:Apexpages.addMesssageしてreturn null;
(3)保存
入力値チェック異常があった場合のApexpages.addMesssageしてreturn null;するのですが、そこではエラーになりません。
一方で、同時更新がみつかった場合Apexpages.addMesssageしてreturn null;した場合はエラーになるという不可解な挙動です。
エラーメッセージについては、なにもでておらず、
ログをみますと、例外がいっさいthrowされておらずそのログがおわった直後、
いきなりExceptionページへ遷移されている結果となっております。
ただ、スミマセン。↑の状況も何回か見受けられたのですが、現在は、当初の
「<apex:inputText> 要素の値は、文字列型として解決する必要があります。」
となります。
12:46:01.0 (22738811)|VF_EVALUATE_FORMULA_BEGIN|066N00000002J42|#{lockedMessage != null}
12:46:01.0 (22749801)|VF_EVALUATE_FORMULA_END
12:46:01.0 (22981828)|VF_PAGE_MESSAGE|<apex:inputText> 要素の値は、文字列型として解決する必要があります。
12:46:01.0 (22995646)|VF_EVALUATE_FORMULA_BEGIN|066N00000002J42|#{lockedMessage != null}
12:46:01.0 (23012582)|VF_EVALUATE_FORMULA_END
「<apex:inputText> 要素の値は、文字列型として解決する必要があります。」
上記メッセージが発生するのは、以下の部分のようでして、
以下をコメントアウトすると保存ができます。
ご多忙の折考えていただきまして誠に感謝します!!
ありがとうございました!
解決はしませんでしたが少し類似のエラー情報が無いか検索してみたところ、下記情報を見つけました。
https://developer.salesforce.com/forums/?id=906F000000095ugIAA
何か特定の条件で発生するエラーではあるようでした。
inputFieldをつかったやり方に変更して解決したとのことよかったです。
なるほど。英語サイトで似た情報があったのですね。