2009-07-17 8 views
0

Faceletsでカスタムタグを取得するために、タグ(ソース)ファイルを作成したいと考えています(as described here)。value属性とバッキングBeanを使用してInputTextタグファイルを作成するにはどうすればよいですか?

<my:inputText value="#{myBean.someString}"/> 
<my:inputText inputText="#{myBean.inputText}"/> 

最初のケースでは、Bean内の単純なStringプロパティにバインドできます。 2番目のケースでは、myBeanは入力フィールド用のバッキングBeanを提供する必要があります。そのバッキングBeanには、値だけでなく、maxlength、disabled、mandatoryなどのプロパティも含まれています。

タグファイルは、この(簡体字)のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<ui:fragment 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:c="http://java.sun.com/jstl/core" 
    xmlns:h="http://java.sun.com/jsf/html"> 

<c:set var="someValue" value="#{value}"/> 

<c:if test="#{empty value and not empty inputText}"> 
    <c:set var="someValue" value="#{inputText.value}"/> 
</c:if> 

    <h:inputText value="#{someValue}" 
    disabled="#{disabled or inputText.disabled}"/> 
</ui:fragment> 

この問題があり、これが許可されていません。入力フィールドにテキストを入力すると、次のエラーが表示されます。設定操作の構文が無効です。どちらか一方が指定されているかどうかに応じて、 "value"または "inputText.value"をどのように使用できますか?

答えて

0

はこれを試してみてください:テストは、あなたがそれらをしてやりたい場合は

<my:inputText inputText="#{bean.value}" disabled="#{bean.disabled}"/> 

<?xml version="1.0" encoding="UTF-8"?> 
<ui:fragment 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:c="http://java.sun.com/jstl/core" 
    xmlns:h="http://java.sun.com/jsf/html"> 

<c:set var="someValue" value="#{value}"/> 

<c:if test="#{empty value and not empty inputText}"> 
     <c:set var="someValue" value="#{inputText}"/> 
</c:if> 

    <h:inputText value="#{someValue}" disabled="#{disabled}"/> 
</ui:fragment> 
+0

「無効」属性の場合のみ、私はそこに違いは見当たりません。これがなぜ助けになるのか、私に説明することができますか? –

+0

私はinputText.valueとinputText.disabledを使用していません。どちらもfaceletsで利用できません。 (おもう!) – Martlark

1

はあなたと仮定すると、これはおそらく動作します...(私は通常、それらを使っています。おそらく、単にレンダリングされたプロパティを使用して、よりきれいに見えるはずです。)

<?xml version="1.0" encoding="UTF-8"?> 
<ui:fragment 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:c="http://java.sun.com/jstl/core" 
    xmlns:h="http://java.sun.com/jsf/html"> 

<c:if test="#{empty value and not empty inputText}"> 
    <h:inputText value="#{inputText.someValue}" 
       disabled="#{disabled or inputText.disabled}"/> 
</c:if> 
<c:if test="#{not empty value and empty inputText}"> 
    <h:inputText value="#{value}" disabled="#{disabled}"/> 
</c:if> 
</ui:fragment> 

SomeValueを使用すると、指定した文字列への参照を維持するのではなく、新しいローカル文字列が作成される可能性があります。

関連する問題