2017-09-06 1 views
0

jsf解析前にいくつかのJavaコードを実行することは可能ですか?解析前にコードを実行

私のユースケース:さんが言わせて、私はoutputText外部プロパティファイルにいくつかの定義されています

<h:outputText value="#{msg['my.example.label']}"/> 

そしてこのoutputTextのそれぞれの後に、私はmsgキーの値を持つ別のoutputTextを持ちたい(デバッグするためには、目的)。

<h:outputText value="#{msg['my.example.label']}"/> 
<h:outputText value="my.example.label"/> 

そして私は、各ラベルに、それは手動追加、しかし、それは、#{msg[...]}断片を検出キー抽出することができますいくつかのコードを書いて、元のタグの後にそれを追加する必要はありません。

JSFで可能ですか?

+0

あなたは2つのことができます。 'key'を属性として持つカスタムコンポーネントを作成し、デバッグモードの場合はキーと解決された 'msg'を表示し、デバッグ/開発者モードでない場合はラベルのみを表示します。しかし、リソースリゾルバ(https://stackoverflow.com/questions/13655540/read-resource-bundle-properties-in-a-managed-beanの回答の「代替」部分)を作成し、 – Kukeltje

答えて

0

HtmlOutputText<h:outputText>)を拡張するカスタムコンポーネントを作成できます。ここで私は似たようなのために使用している例が、(豆、resurcesと暗黙オブジェクト)すべての式を示すだけではないリソース変数:

カスタムコンポーネント:

​​

のtaglib:

<namespace>http://com.mycompany/custom-components</namespace> 
<tag> 
    <tag-name>customOutputText</tag-name> 
    <component> 
     <component-type>com.mycompany.component.CustomOutputText</component-type> 
     <renderer-type>com.mycompany.component.CustomOutputText</renderer-type> 
    </component> 
    <attribute> 
     <name>value</name> 
     <required>true</required> 
     <type>java.lang.String</type> 
    </attribute> 
</tag> 

web.xmlの登録:

<context-param> 
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name> 
    <param-value>/WEB-INF/custom.taglib.xml</param-value> 
</context-param> 

そして、テストするために、単純な男老齢(この場合、CDI)ビーンXHTMLで

@Named 
@ViewScoped 
public class MyBean implements Serializable { 

    private static final long serialVersionUID = 1L; 

    public String getSample() { 
     return "sample text from bean"; 
    } 
} 

タグライブラリを含み、及びコンポーネントを使用:

<custom:customOutputText value="#{myBean.sample}" /> 

、出力がある:

sample text from bean 

[expression: #{myBean.sample}] 

なおコンポーネントは2 htmlタグ、1 <span>と1 <p>を生成します。アプリCSSスタイルでこれを考慮します。

+0

nice solution。私のコメントに書いたものの一種...しかし、... OPは完全な式ではなく、式から 'キー'を表示したいと考えています。 (例えば '#{field ['my.other。'} 'のように)' 'msg' '部分と' '}' '部分を削除します。 (これは別の問題です)。しかし、答えが – Kukeltje

+0

ありがとう、ありがとう、それを行うには多くの方法がありますが、例は多くのうちの1つだけです。喜んで助けてください! –

関連する問題