2014-10-14 17 views
0

У меня есть пользовательский элемент управления, который я буду называть ccViewTemplate с этим кодом в нем:Доступ компонент пользовательского элемента управления

<xp:repeat id="repeatData" rows="30" 
    value="#{viewEntry}" var="veData" 
    first="#{javascript:return (sessionScope.ssFirst != null)?sessionScope.ssFirst:0;}"> 
<xp:panel id="panelSelect"> 
<xp:callback facetName="viewBodyFacet" id="callback1"></xp:callback> 
</xp:panel><!-- panelSelect --> 
</xp:repeat> 

вид базы данных (viewEntry) также определен в ccViewTemplate и определенную на основе нескольких пользовательские свойства. ccViewTemplate затем добавляется в другой настраиваемый элемент управления ccFinalView. Когда введены пользовательские свойства, а содержимое дисплея вводится в viewBodyFacet. У меня есть доступ к veData, и все отлично работает с этим. В viewBodyFacet у меня есть ссылка, которая делает перенаправление, чтобы открыть документ, который также отлично работает. Однако в ссылке я хочу получить свойство repeatData First и сохранить его так, чтобы он возвращался к правильной странице повтора. Я использую этот код:

sessionScope.put ('ssFirst', getComponent ("repeatData"). First);

Однако код не может найти getComponent ("repeatData"), поскольку он находится внутри ccViewTemplate и недоступен. Есть ли способ получить компонент repeatData из ccViewTemplate, а в ccFinalView, который содержит ccViewTemplate.

Я сделал GetComponent ("ccViewTemplate") и у меня есть дескриптор пользовательского контроля, но GetComponent ("ccViewTemplate"). GetComponent ("RepeatData"). Первый выходит из строя. Итак, есть ли способ вытащить значение из компонента «внутри» пользовательского элемента управления из «внешнего» элемента управления custome? посмотрел немного дальше и нашел это:

var rtn = getComponent ("ccViewTemplate"). GetPropertyMap(). GetProperty ("repeatData");

Он не генерирует ошибку, но ничего не возвращает, если добавить

уаг БТН = GetComponent ("ccViewTemplate") getPropertyMap() GetProperty ("repeatData") первым...;

я получаю GetComponent ошибки() равна нуль

Надеется, что это имеет смысл.

+0

не смог получить доступ к переменной sessionScope.ssFirst напрямую или использовать java bean, который управляет переменной ssFirst и имеет ли там необходимые проверки? Возможно, также поместив значение и первые переменные в URL как параметры и разрешить значения по умолчанию, если они не найдены? – Greg

+0

Greg - проблема заключается в установке значения для первого с одной кнопки. Кнопка находится в настраиваемом элементе управления, который содержится в другом настраиваемом элементе управления, который содержит повторение, поэтому кнопка не имеет доступа к повторению, чтобы узнать, для чего она установлена. –

ответ

0

Из чего я понимаю, это идеальная работа для java bean. Боб может даже сохранить значение по умолчанию.

public class Controller{ 

public String value; 

public Controller(){ 
value = "default_value"; 
} 

public String getValue(){return value;} 
public void setValue(String value){this.value=value} 

} 

Таким образом, значение будет доступно, как только объект будет создан. нажав на кнопку, затем устанавливает значение с помощью JavaScript,

ControllerBean.setValue("thisValue"); 

и вы можете прочитать значение

ControllerBean.getValue(); 

Этот вопрос показывает, как настроить компонент: How to set up a managed bean to work with Notes document

Установив это, скажем, viewScope, вы можете получить доступ к значению где угодно, независимо от того, находится ли он в пользовательском элементе управления или главной странице. Я очень рекомендую этот подход. Это просто означает возможность переосмысления вашей настраиваемой структуры управления.

EDIT
Дополнительные идеи включают наличие перечисление, который поддерживает мнения,

public enum Views{ 
VIEW_1("viewAlias", "urlParam") 

private String vwAlias; 
private String urlParam; 
private Views(String alias, String param){ 
vwAlias = alias; 
urlParam = param; 
} 

// public getters 
} 

И тогда в вашем контроллере вы можете получить вид строки:

1. By seeing if a view param is included in the URL 
2. If a cookie value is set 
3. Take the hard coded default 

Нажатие изменения а затем задает значение cookie и изменяет параметр вида и перенаправляет.

Это все дополнительные идеи, но я создаю контроллеры своего вида. В ближайшее время я сделаю учебник.