Решено Присваивание Компоненту Id В Data Table

JohnLemon

Well-known member
20.08.2014
274
2
#1
Здравствуйте, может кто подсказать почему в Repeat добавляется к id объекта index name а в data table нет, вот код:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

<xp:repeat id="rAnal" rows="30" style="width:auto" indexVar="rIndx" repeatControls="true" first="0" value="#{java script:return 5;}">
<xp:inputText id="iAnal_${rIndx}"></xp:inputText>
<xp:br></xp:br>
</xp:repeat>
<xp:br></xp:br>
<xp:br></xp:br>

<xp:dataTable id="dataTable1" rows="30" indexVar="tIndx" first="0" value="#{java script:return 5;}">
<xp:column id="column1">
<xp:inputText id="input_${tIndx}"></xp:inputText></xp:column>

</xp:dataTable></xp:view>
Подскажите если не сложно как присвоить уникальные ид объектам в Data Table что бы потом вытянуть данные из них ???
 

alexas1

Lotus team
10.04.2014
726
145
#2
Здравствуйте, может кто подсказать почему в Repeat добавляется к id объекта index name а в data table нет
Добавляется. Только в таблице индекс элемента формируется по-другому: напр. id="view:_id1:dataTable1:0:column1:input_"
Доступ можно получить "влоб" - как ячейку таблицы (по индексу строки-столбца)
Или по ID элемента.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#4
Как мне в данном случае обратиться к конкретному input на ssjs??
Очередной воздушный замок?

Откуда будет проходить изменение данных?
Пример приближенный к действительности можно? Нарисуй хотя бы
 

JohnLemon

Well-known member
20.08.2014
274
2
#5
Очередной воздушный замок?
Откуда будет проходить изменение данных?
Вопрос уже решил, через генерацию собственных компонентов в таблицу, но все таки хотелось бы узнать
Пример приближенный к действительности можно? Нарисуй хотя бы
Код:
<xp:dataTable id="dataTable1" rows="30" indexVar="tIndx" first="0" value="#{java script:return 5;}">
<xp:column id="column1">
<xp:inputText id="input_${tIndx}"></xp:inputText></xp:column>
</xp:dataTable>
Ну например как мне при нажатии на кнопку записать в sessionScope.temp значение из инпута который во второй строке таблицы.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#6
Говорю же.. очередной воздушный замок.
Если в каждой строке таблицы есть своя кнопка - никаких танцов с бубнами над именами компонентов делать не надо.
Как определяется с какой строки надо брать данные? А вдруг надо взять из третьей строки?
 

JohnLemon

Well-known member
20.08.2014
274
2
#7
Если в каждой строке таблицы есть своя кнопка - никаких танцов с бубнами над именами компонентов делать не надо.
Вот с кнопками как раз проблема есть маленький вопросик пытаюсь сделать кнопку и присвоить каждой свой код, нашел в гугле что то подобное
Код:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

<xp:button
value="Add Event"
id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action>
<![CDATA[#{java script:
var event = new com.ibm.xsp.component.xp.XspEventHandler();
var code = "#{java script:"+getComponent('inputText1').setValue('111')+"}"
var action = facesContext.getApplication().createMethodBinding( code, null );

event.setAction(action);
event.setSubmit(true);
event.setEvent("onclick");
event.setRefreshMode("complete");

var cmp = getComponent("button2");
cmp.getChildren().add( event );

}]]>
</xp:this.action>
</xp:eventHandler></xp:button>
 
<xp:button
value="Exec Event"
id="button2">
</xp:button>
<xp:inputText id="inputText1"></xp:inputText></xp:view>
Но не могу понять почему код выполняется сразу а не по нажатию на вторую кнопку
грешу что
Код:
var action = facesContext.getApplication().createMethodBinding( code, null );
выполняется сразу, что нужно сделать что бы присвоить код кнопке и он срабатывал только когда я ее нажимаю???
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#8
Ты нормальный набросок показать можешь?
Не отдельные части, а все в комплексе
 

JohnLemon

Well-known member
20.08.2014
274
2
#9
Ты нормальный набросок показать можешь?
Не отдельные части, а все в комплексе
Не сейчас не могу, нет проекта по рукой )
В данном примере же все понятно, я нажимаю на кнопку а она не код другой кнопке присваивает а выполняет его почему то ((

Добавлено: вообще мне нужно что бы при загрузке страницы создавались кнопки и им присвоить разный код
Добавляю так, в цикле, в afterPageLoad:
Код:
var btnDel:com.ibm.xsp.component.xp.XspCommandButton = new com.ibm.xsp.component.xp.XspCommandButton();
btnDel.setValue("Save");
btnDel.setId("saveButton"+i);
var code = "#{java script:"+getComponent('labelAnalA'+rowNum).setValue('111'+rowNum)+"}"
var action = facesContext.getCurrentInstance().getApplication().createMethodBinding( code, null );
var newEvent:com.ibm.xsp.component.xp.XspEventHandler = new com.ibm.xsp.component.xp.XspEventHandler(); 
newEvent.setSubmit(true);
newEvent.setRefreshMode("complete");
newEvent.setEvent("onclick");
newEvent.setAction(action);
btnDel.getChildren().add(newEvent);
tdNomerA.getChildren().add(btnDel);
Но он выполняет весь код сразу при загрузке странице
 

JohnLemon

Well-known member
20.08.2014
274
2
#10
Я так понимаю косяк в том что
Код:
var code = "#{java script:"+getComponent('labelAnalA'+rowNum).setValue('111'+rowNum)+"}"
выполняется сразу, как эту строку добавить как код для кнопки ???
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#11
Да не нужен проект... сделай набросок... ну в паинте нарисуй хоть...
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#12
Ну а вообще касательно твоего кода... кроме копипаста надо еще немного думать.
Ты формируешь код, который должен быть исполнен, а следовательно - это строка.
Значит код должен выглядеть так
JavaScript:
var code = "#{java script: getComponent('labelAnalA').setValue('111')}"
Но и это все равно выдаст ошибку, потому что код "оторван" от контекста и твой код должен выглядеть так
JavaScript:
var code = "#{java script: var tmp = com.ibm.xsp.util.FacesUtil.getComponentFor( view, 'inputText1'); tmp.setValue('111') }"
По этому в очередной раз тебе говорю - не выдумывай колесо!
 

JohnLemon

Well-known member
20.08.2014
274
2
#13
Ну а вообще касательно твоего кода... кроме копипаста надо еще немного думать.
Ты формируешь код, который должен быть исполнен, а следовательно - это строка.
Значит код должен выглядеть так
JavaScript:
var code = "#{java script: getComponent('labelAnalA').setValue('111')}"
Но и это все равно выдаст ошибку, потому что код "оторван" от контекста и твой код должен выглядеть так
JavaScript:
var code = "#{java script: var tmp = com.ibm.xsp.util.FacesUtil.getComponentFor( view, 'inputText1'); tmp.setValue('111') }"
По этому в очередной раз тебе говорю - не выдумывай колесо!
А как можно обратиться к текущему объекту ?? Хотя бы получить его ид