我正在开发一个 Liferay portlet。我使用 AlloyUI 表单。这是 portlet 的代码(称为 provision-portlet;我是法国人,所以注释是法语的,但我尝试用英语编写代码):
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<%@ page import="org.jdom2.*, org.jdom2.input.*, org.jdom2.output.*" %>
<%@ page import="java.io.File, java.io.FileReader, java.io.Reader" %>
<%@ page import="java.util.List" %>
<%@ page import="java.lang.Exception, java.io.FileNotFoundException" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="org.apache.commons.lang3.*" %>
<%
System.out.println("view.jsp");
%>
<portlet:defineObjects/>
<!-- déclenche l'appel à ProvisionPortlet::processOrgTemplate en sortie de la page -->
<portlet:actionURL name="processOrgTemplate" var="processOrgTemplateURL">
<!-- passage des paramètres d'entrée au paramètre de sortie -->
<%
String workflowID = (String) renderRequest.getAttribute("workflowID");
%>
<portlet:param name="workflowID" value="<%= workflowID %>" />
</portlet:actionURL>
<!-- formulaire -->
<aui:form action="<%= processOrgTemplateURL.toString() %>" method="post">
<!-- alignement des champs -->
<aui:fieldset column="true">
<%
// parsing du document XML passé en paramètre d'entrée
String parseMe = (String) renderRequest.getAttribute("vCloud:OrgTemplate");
java.io.StringReader strReader = new java.io.StringReader(parseMe);
java.io.Reader reader = (java.io.Reader) strReader;
// on cree une instance de SAXBuilder
SAXBuilder sxb = new SAXBuilder();
org.jdom2.Document document = new org.jdom2.Document();
try {
// on cree un nouveau document JDOM avec en argument le fichier
// le parsing est termine
document = sxb.build(reader);
} catch (java.io.IOException e) {
e.printStackTrace();
return;
} catch (JDOMException e) {
e.printStackTrace();
return;
}
// on initialise un nouvel élément root avec l'élément root du document
Element root = document.getRootElement();
// lecture du namespace
Namespace ns = root.getNamespace();
// lecture des enfants de l'élément racine
Element steps = root.getChild("steps", ns);
List<Element> listStep = steps.getChildren("step", ns);
for (Element step : listStep) {
Element group = step.getChild("group", ns);
Element fields = group.getChild("fields", ns);
Element field = fields.getChild("field", ns);
String id = field.getAttributeValue("id");
System.out.println("id = " + id); // DEBUG
if (id.compareTo("org") == 0) {
// présentation des organization en menu déroulant
Element decorators = field.getChild("decorators", ns);
Element dropDown = decorators.getChild("drop-down", ns);
Element array = dropDown.getChild("array", ns);
List<Element> listSdkObject = array.getChildren("sdk-object", ns);
%>
<!-- menu déroulant : org -->
<aui:select label="<%= id %>" name="<%= id %>">
<%
for (Element sdkObject : listSdkObject) {
String displayValue = sdkObject.getAttributeValue("display-value");
XMLOutputter xmlOutputter = new XMLOutputter(Format.getPrettyFormat());
String strNotEscaped = xmlOutputter.outputString(sdkObject);
String strEscaped = StringEscapeUtils.escapeXml(strNotEscaped);
%>
<aui:option value="<%= strEscaped %>">
<liferay-ui:message key="<%= displayValue %>" />
</aui:option>
<%
}
%>
</aui:select>
<%
} else if (id.compareTo("template") == 0) {
// présentation des template en menu déroulant
Element decorators = field.getChild("decorators", ns);
Element dropDown = decorators.getChild("drop-down", ns);
Element array = dropDown.getChild("array", ns);
List<Element> listSdkObject = array.getChildren("sdk-object", ns);
%>
<!-- menu déroulant : vapp -->
<aui:select label="<%= id %>" name="<%= id %>">
<%
for (Element sdkObject : listSdkObject) {
String displayValue = sdkObject.getAttributeValue("display-value");
XMLOutputter xmlOutputter = new XMLOutputter(Format.getPrettyFormat());
String strNotEscaped = xmlOutputter.outputString(sdkObject);
String strEscaped = StringEscapeUtils.escapeXml(strNotEscaped);
%>
<aui:option value="<%= strEscaped %>">
<liferay-ui:message key="<%= displayValue %>" />
</aui:option>
<%
}
%>
</aui:select>
<%
}
}
%>
<!-- bouton de soumission du formulaire -->
<aui:button-row>
<aui:button type="submit" value="Send"/>
</aui:button-row>
</aui:fieldset>
</aui:form>
出于某种原因,它看起来像这样:
http://postimg.org/image/x3h4vy2cz/
谁能告诉我为什么这些表单不在 portlet 中,我该如何改变它?
谢谢
玛丽