2016-03-18 3 views
0

Я использую struts 2 и liferay 6.1.0 для разработки веб-сайта. Теперь я хочу обновить версию liferay до 6.2. Когда я запускаю сервер tomcat liferay, он показывает, что все портлеты доступны для использования. Но когда я заполняю форму, значения не переходят в класс Action. Я sysout проверил его и обнаружил, что значения s: textfield не подходят к классу действий, но строка sysout печатает в консоли. Точно такой же код работает в liferay 6.1.Liferay Portlets не работают над обновлением с 6.1 до 6.2

Любая помощь очень заметна.

JSP файл:

<s:form name="searchCallLogCategoryWise" id="searchCallLogCategoryWise" action="searchCallLogCategoryWise" method="post"> 
<table> 
<tr> 
    <td width="30%">Status</td> 
    <td width="70%"><select name="caseCriteria" id="caseCriteria"> 
     <option value="Select">Select</option> 
     <option value="Open">Open</option> 
     <option value="Closed">Closed</option> 
     <s:textfield name="callLogId" id="callLogId" value="1234"></s:textfield> 
     </select> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <s:submit 
     action="searchCallLogCategoryWise" value="Search"></s:submit> 
    </td> 
</tr> 
</table> 
</s:form> 

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <constant name="struts.ui.theme" value="simple" /> 
    <package name="view" extends="struts-portlet-default" 
     namespace="/view"> 
     <action name="searchCallLogCategoryWise" class="com.stp.portal.view.callLogModulePortlet" method="searchCallLogCategoryWise" > 
      <result name="success">/WEB-INF/view/CallLogReportStartPage.jsp</result>  
     </action> 
    </package> 
</struts> 

callLogModulePortlet.java

public class callLogModulePortlet extends DefaultActionSupport { 

    private String callLogId = ""; 
    private String caseCriteria = ""; 

    public String getCallLogId() { 
     return callLogId; 
    } 

    public void setCallLogId(String callLogId) { 
     this.callLogId = callLogId; 
    } 

    public String getCaseCriteria() { 
     return caseCriteria; 
    } 

    public void setCaseCriteria(String caseCriteria) { 
     this.caseCriteria = caseCriteria; 
    } 


    public String searchCallLogCategoryWise() throws Exception 
    { 
     System.out.println("i am in searchCallLogCategoryWise..."); 
     System.out.println("Call Log Id:: " + getCallLogId()); 
     System.out.println("case Criteria: " + getCaseCriteria()); 

     return "success"; 
    } 

} 

Когда я запустить его в консоли:

i am in searchCallLogCategoryWise... 
Call Log Id:: 
case Criteria: 

Я использую следующие банки:

struts2-ядро-2.2.3.jar

struts2-портлет-плагин-2.2.3.jar

xwork-ядро-2.2.3.jar

+0

Текстовое поле внутри select не допускается. https://www.w3.org/TR/html5/forms.html#the-select-element. –

ответ

1

Попробуйте добавить <portlet:namespace/> на имя ваших параметров и закрыть <select> вход правильно:

<select name="<portlet:namespace/>caseCriteria" id="caseCriteria"> 
    <option value="Select">Select</option> 
    .... 
</select> 
<s:textfield name="<portlet:namespace/>callLogId" id="callLogId" value="1234"/> 

Я не уверен, если т он s taglib добавляет его автоматически - но портлеты должны знать, что параметры фактически направлены на ваш портлет. Обычная <select> определенно не включает его автоматически.

0

При добавлении <requires-namespaced-parameters>false</requires-namespaced-parameters> в liferay-portlet.xml решена проблема.

+0

- это альтернатива грубой силы для правильного определения имен параметров (см. Мой ответ) –

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