动态形成AUI Liferay

时间:2013-10-02 12:18:41

标签: javascript liferay portlet liferay-aui

我在Liferay中使用这样的形式做一个portlet:

<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并且不能制作AUI,如果我使用HTML正常进行新选择,当我捕获值时会丢失一些。

感谢。

2 个答案:

答案 0 :(得分:2)

正如@Baxtheman所说,这不起作用,因为标签不是客户端HTML标签,而是来自aui-taglib的服务器端标签。

要动态加载选择框的内容,您需要执行以下步骤:

  1. 在JSP中添加一个元素,但将其隐藏

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

  2. 从您的javascript中,当您想要用来加载第二个选择框的事件发生时,您可以选择下拉框并添加您希望的选项,例如此帖子中的答案{{ 3}}

  3. 确保在加载选项后将选择框设置为可见。

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

  4. 为了更清楚,如果您添加普通的HTML选择框,那么您缺少关于POST的信息的原因是因为aui:form序列化数据的方式。我相信最终会有一个自定义onSubmit,只收集aui元素。

答案 1 :(得分:1)

&lt; aui:select&gt; 是JSP taglib,而不是最终的HTML标记。

如果您理解这一点,请解决。