2013-10-02 4 views
4

Я делаю портлет в Liferay с формой, как это:Динамические формы AUI LifeRay

<form method="post" action="<%=actionAddRule.toString() %>" id="myForm" > 
    <aui:select name="attribute" style="float: left;"> 
     <c:forEach var="attr" items="${fields}"> 
      <aui:option value="${attr}" selected="${condition.attribute==attr}">${attr}</aui:option> 
     </c:forEach>         
    </aui:select> 
    <aui:input type='button' value="Add Condition" name='addCondition' onClick="addCondition();" %>'></aui:input> 
    <div id='conditions'></div> 
</form> 

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

var conditions = document.getElementById('conditions'); 
conditions.innerHTML('<aui:select ...>...</aui:select>'); 

и

document.createElement('<aui:select>'); 

Я попробовал тоже с AUI скрипт делает:

var nodeObject = A.one('#divAtr'); 
nodeObject.html('<aui:input type="text" name="segment21" label="Segment" value="lalal" />'); 

Но это не работает, потому что это HTML и Безразлично» t может сделать AUI, и если я сделаю новый выбор с нормальным HTML, когда поймаю значения, некоторые теряются.

Спасибо.

ответ

2

Как заявил @Baxtheman, это не сработает, потому что тег не является тегом HTML на стороне клиента, а тегом на стороне сервера из aui-taglib.

Чтобы динамически загружать содержимое выберите поле вы хотите выполнить следующие шаги:

  1. добавить элемент в вашей JSP, но сделать это скрытый

    <aui:select id="conditions" style="display: none;"><aui:select>

  2. От ваш javascript, когда произойдет событие, которое вы хотите использовать для загрузки второго окна выбора, вы должны выбрать раскрывающийся список и добавить параметры, которые вы хотите, с чем-то вроде ответа с этого поста. Adding options to select with javascript

  3. Убедитесь, что вы выбрали поле для выбора после загрузки параметров.

    document.getElementById('<portlet:namespace/>conditions').style.display = 'block';

Для большей ясности, почему вы теряете информацию о POST, если добавить обычный HTML выберите поле, из-за тем, как AUI: форма упорядочивает данные. Я считаю, что в итоге получается пользовательский onSubmit, который собирает только элементы aui.

+1

Я думаю, вам нужно использовать document.getElementById ('<портлет: пространство имен /> условия). Style.display .. исправьте меня, если я ошибаюсь –

+0

Я считаю, что вы правы Киран. Спасибо, что я обновлю, чтобы отразить этот недосмотр. Представленные элементы из тегов aui определенно добавляют пространство имен портлетов к атрибутам id и name. Хороший улов. – Barryrowe

+0

Это не обычная подача, которая собирает только элемент aui, это портлет, который фильтрует представленное содержимое в один префикс с его <портлетом: namespace /> –

1

< aui: select > - это тег-ярлык JSP, а не окончательная разметка HTML.

Если вы это понимаете, вы решаете.

Смежные вопросы