0

次のxhtmlがあります:

<s:fragment
    rendered="#{selectCat.categoryTypes.contains('unclickable')}">
    <h:outputText value="DONT CLICK #{selectCat.webName}" />
</s:fragment> 

<s:fragment rendered="#{selectCat.categoryTypes eq null}">
    <a href="/category/#{_category.fullName}"> #{selectCat.webName}</a>
</s:fragment>

そして、タイプがクリックできないかどうかを読み取ろうとしています..

バックエンド Bean は次のように読み取ります。

@ManyToMany(fetch = FetchType.LAZY, targetEntity = C_Type.class)
@JoinTable(name = "Category_Type", joinColumns = @JoinColumn(name = "CategoryId"), inverseJoinColumns = @JoinColumn(name = "TypeId"))
@XmlTransient
public Set<C_Type> getCategoryTypes() {
    for (C_Type cc : categoryTypes) {
        System.out.println("=============="+cc.getC_type()+"==============");
    }

    return categoryTypes;
}

リンクをクリックできないようにするにはどうすればよいですか? フロントエンドで?ありがとう

4

1 に答える 1

2

ELこのステートメントは直接には機能しませんJSF 1.x

#{selectCat.categoryTypes.contains('unclickable')}

解決策として、以下のポインターを使用してカスタムtaglib関数を試してください...

taglib を登録するweb.xml

<context-param>
    <param-name>facelets.LIBRARIES</param-name>
    <param-value>
        PATH_TO_CUSTOM_TAGLIB;/WEB-INF/tomahawk.taglib.xml;
    </param-value>
</context-param>

taglib でメソッドを次のように定義します。

<facelet-taglib>
<namespace>
 http://www.client.com/product
</namespace>
...
<function>
    <function-name>contains</function-name>
    <function-class>com.XXX.XXX.XXX.JavaClass</function-class>
    <function-signature>java.lang.Boolean contains(java.util.Set, java.lang.String)</function-signature> 
</function>
 ...
</facelet-taglib>

javaメソッドを次のように定義しcom.XXX.XXX.XXX.JavaClassます

public static Boolean contains(Set setOfObjects, String value){
    //... Assuming you are checking where value, a string, is available in Set or not    
}

XHTML で名前空間を宣言する

xmlns:g="http://www.client.com/product"

そして最後にそれをxhtmlで呼び出します

<s:fragment
    rendered="#{g:contains(selectCat.categoryTypes,'unclickable')}">

それが役に立てば幸い!!!

于 2012-08-15T17:17:18.800 に答える