4

次の要素を拡張したい:

<h:commandButton action="#{menuController.xyz}" value="xyz" 
     image="images/buttons/xyz.png" alt="xyz".....[more attributes]..../>

押されたボタンを生成するコードを含めるには:

<h:commandButton action="#{menuController.xyz}" value="xyz" 
     image="images/buttons/xyz.png" alt="xyz" 
     onmousedown="[some JS here to change image src]"
     .....[more attributes]..../>

これを行う最も適切な方法は JSF コンポーネントを使用することだと理解していますか? そこで、以下を作成しました。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:composite="http://java.sun.com/jsf/composite">
    <head>
        <title>Not present in rendered output</title>
    </head>
    <body>
        <composite:interface>
            <composite:attribute name="depressImage" required="false" />
        </composite:interface>

        <composite:implementation>
            <h:commandButton onmousedown="[some JS here to change the img src to the value of #{cc.attrs.depressImage}]" />
        </composite:implementation>
    </body>
</html>

私の質問は、可能なすべての属性を入力してELをマップする必要なしに、それらを自動的に入力する方法がありますか(たとえば、コマンドボタンのアクションと値など)?

4

1 に答える 1

4

残念ながら、この方法でそれらを自動的に継承するきちんとした方法はありません。それらをすべて再定義する必要があります。ちなみに、実際のカスタム コンポーネントの場合は、ファイルに対しても同じことを行う必要がある.taglib.xmlため、これは複合コンポーネントの問題だけでなく、実際のカスタム コンポーネントの問題でもあります。タグ属性は、いかなる形式の継承もサポートしていません。

今絶対に必要なものだけを再定義し、必要に応じて新しいものを追加することを検討してください。

于 2012-08-30T14:02:13.570 に答える