1
- 상위 포틀릿에는 채우기가 있지만 아직 제출하지 않는 양식이 있습니다.
- 그런 다음이 상위 포틀릿에서 링크를 클릭하여 팝업에서 포틀릿을 채우고 값을 제출하는 팝업 포틀릿을 엽니 다.
- 이제이 값을 상위 포틀릿에서 사용할 수 있습니다. 그러나 새로 고치지 않으면 상위 포틀릿에서 값을 사용할 수 없습니다.
- 그래서 ajax를 사용하여 팝업 제출시 상위 포틀릿을 새로 고치는 로직을 작성하고 상위 포틀릿에서 값을 사용할 수있게됩니다.
- 그러나 문제는 상위 포틀릿의 양식이 지워지고 양식을 다시 채워야한다는 것입니다.
그럼 어떻게 제출할 부모 폼 값을 보존 할 수 있습니까? 또는 상위 포틀릿을 새로 고치지 않고 상위 포틀릿에서 팝업 포틀릿 값을 사용할 수있게 만드는 방법이 있습니까?팝업 포틀릿에서 상위 포틀릿으로 값을 다시 보냅니다.
부모 포틀릿의 코드 :
<aui:form action="<%= editURL %>" method="POST" name="fm">
<aui:fieldset>
<aui:input name="redirect" type="hidden" value="<%= redirect %>" />
<aui:input name="name" />
<aui:input name="acronym" />
<aui:input name="url" />
<aui:select showEmptyOption="<%= true %>">
// Want to make the values added from pop up available here
</aui:select>
<%
String portletId = (String) request.getAttribute(WebKeys.PORTLET_ID);
String portletNamespace = PortalUtil.getPortletNamespace(portletId);
%>
<c:set var="portletNameSpaceVal" value="<%=portletNamespace%>" />
<liferay-portlet:renderURL
var="addURL" windowState="<%= LiferayWindowState.POP_UP.toString() %>"
portletName="name">
<liferay-portlet:param name="jspPage" value="/html/person/edit_person_popup.jsp"/>
</liferay-portlet:renderURL>
<c:set var="portletURL" value="<%=addURL%>" />
<aui:a href="#" onClick="${portletNameSpaceVal}showPopup('${portletURL}')"><liferay-ui:icon image="add"/></aui:a> // this link triggers the pop up
<aui:select label="Country" name="countryCode" showEmptyOption="<%= true %>">
<%
for (Country country : countries) {
%>
<%
}
%>
</aui:select>
</aui:fieldset>
<aui:button-row>
<aui:button type="submit" />
<aui:button onClick="<%= viewURL %>" type="cancel" />
</aui:button-row>
</aui:form>
<aui:script>
function <portlet:namespace />showPopup(url) {
var url = url;
Liferay.Util.openWindow(
{
dialog: {
cache: false,
width:800,
modal: true,
centered: true
},
id: 'popUpId',
uri: url
}
);
}
</aui:script>
<aui:script>
Liferay.provide(window, 'refreshPortlet', function() {
var curPortlet = '#p_p_id<portlet:namespace/>';
Liferay.Portlet.refresh(curPortlet);
},
['aui-dialog','aui-dialog-iframe']
);
</aui:script>
<aui:script>
Liferay.provide(window, 'closePopup', function(dialogId) {
var A = AUI();
var dialog = Liferay.Util.Window.getById(dialogId);
dialog.destroy();
},
['liferay-util-window']
);
</aui:script>
은 그 때 나는 포틀릿을 팝업을 가지고있다.
<aui:form action="<%= editURL %>" method="POST" name="fm" onSubmit="event.preventDefault();">
<aui:fieldset>
<aui:input name="name" />
<aui:input name="url" />
<aui:input name="address" />
</aui:fieldset>
<aui:button-row>
<aui:button type="submit" />
<aui:button name="cancel" value="Cancel"/>
</aui:button-row>
</aui:form>
<aui:script use="aui-base,aui-form-validator,aui-io-request">
AUI().use('aui-base','aui-form-validator','aui-io-request',function(A){
var rules = {
<portlet:namespace/>name: {
required: true
},
<portlet:namespace/>url: {
url: true
},
<portlet:namespace/>address: {
required: true
},
};
var fieldStrings = {
<portlet:namespace/>name: {
required: 'The Name field is required.'
},
<portlet:namespace/>address: {
required: 'The Address field is required.'
},
};
new A.FormValidator({
boundingBox: '#<portlet:namespace/>fm',
fieldStrings: fieldStrings,
rules: rules,
showAllMessages:true,
on: {
validateField: function(event) {
},
validField: function(event) {
},
errorField: function(event) {
},
submitError: function(event) {
event.preventDefault(); //prevent form submit
},
submit: function(event) {
var A = AUI();
var url = '<%=editURL.toString()%>';
A.io.request(
url,
{
method: 'POST',
form: {id: '<portlet:namespace/>fm'},
on: {
success: function() {
Liferay.Util.getOpener().refreshPortlet();
Liferay.Util.getOpener().closePopup('popUpId');
}
}
}
);
}
}
});
});
</aui:script>
<aui:script use="aui-base">
A.one('#<portlet:namespace/>cancel').on('click', function(event) {
Liferay.Util.getOpener().closePopup('popUpId);
});
</aui:script>
저는 평생을 새삼 느끼며 많은 전문 지식을 가지고 있지 않습니다. 이해하기 때문에 나는 resourceURL을 사용하고 이것을 수행하기 위해 serveResource 메소드를 정의해야한다. 하지만 내 양식에는 입력이 데이터베이스에도 삽입되는 적절한 메소드를 호출하는 팝업에서 actionURL이 있기 때문에. 그렇다면 어떻게하면 resourceURL과 actionURL을 함께 사용할 수 있습니까? – SASM
당신은 HTML 양식의 action 속성 안에 resourceURL을 주려고 했습니까? –
예 양식의 조치 속성에 resourceURL을 제공하면 serveResource 메소드가 호출됩니다. 이제 actionURL 메소드를 호출하는 방법은? 내부에서 serveResource를 호출하거나 해당 삽입 메서드의 논리도이 serveResource 메서드 내부에 있어야합니까? – SASM