0

JavaでこのようなXPagesグローバルオブジェクトにアクセスできることを私は知っています

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
...
...

getComponent()しかし、 Javaを使用するのに相当するものを見つけることができません。getComponent()SSJSに似たJavaのクラスやメソッドはありますか?

4

2 に答える 2

5

SSJS を Java で評価するのが最も簡単かもしれません。Sven のコード:

String valueExpr = "#{javascript: getComponent('xxx').getValue();}";
FacesContext fc = FacesContext.getCurrentInstance();
ExpressionEvaluatorImpl evaluator = new ExpressionEvaluatorImpl( fc );
ValueBinding vb = evaluator.createValueBinding( fc.getViewRoot(), valueExpr, null, null);
vreslt = (String) vb.getValue(fc);

Java Bean からアドホック SSJS を呼び出す方法

以下は、Karsten Lehmann による純粋な Java ソリューションです。

/** 
 * Finds an UIComponent by its component identifier in the current 
 * component tree. 
 * 
 * @param compId the component identifier to search for 
 * @return found UIComponent or null 
 * 
 * @throws NullPointerException if <code>compId</code> is null 
 */ 
public static UIComponent findComponent(String compId) { 
    return findComponent(FacesContext.getCurrentInstance().getViewRoot(), compId); 
} 

/** 
 * Finds an UIComponent by its component identifier in the component tree 
 * below the specified <code>topComponent</code> top component. 
 * 
 * @param topComponent first component to be checked 
 * @param compId the component identifier to search for 
 * @return found UIComponent or null 
 * 
 * @throws NullPointerException if <code>compId</code> is null 
 */ 
public static UIComponent findComponent(UIComponent topComponent, String compId) { 
    if (compId==null) 
        throw new NullPointerException("Component identifier cannot be null"); 

    if (compId.equals(topComponent.getId())) 
        return topComponent; 

    if (topComponent.getChildCount()>0) { 
        List childComponents=topComponent.getChildren(); 

        for (UIComponent currChildComponent : childComponents) { 
            UIComponent foundComponent=findComponent(currChildComponent, compId); 
            if (foundComponent!=null) 
                return foundComponent; 
        } 
    } 
    return null; 
} 

http://www.mindoo.com/web/blog.nsf/dx/18.07.2009191738KLENAL.htm

于 2013-01-25T17:38:21.750 に答える
2

拡張ライブラリのグループ拡張には、XspQueryクラスといくつかのフィルターを含むクエリパッケージがあります。このクラスは、dojo.queryのように機能して、IDだけでなく、コンポーネントクラス、クライアントID、サーバーIDなどのコンポーネントを見つけるためのさまざまな方法を提供することを目的としています。サーバーIDを使用して次のことを行う例を次に示します。コンポーネントを見つけます:

XspQuery query = new XspQuery();
query.byId("someId");
List<UIComponent> componentList = query.locate();

ここで見つけることができます:https ://svn-166.openntf.org/svn/xpages/extlib/eclipse/plugins/com.ibm.xsp.extlib.group/src/com/ibm/xsp/extlib/query/

グループ拡張機能は拡張機能ライブラリと一緒に配布されることはありませんでしたが、svnリポジトリにあり、それを取得するには、OpenNTFsvnサーバーを経由する必要がありました。

于 2013-01-26T15:04:12.583 に答える