I've attached the struts-config.xml and tiles-defs.xml.

Ralph

Ralph Goers wrote:
Thanks Ate. I looked at the struts-config and noticed that the forward didn't have redirect="true" so I added it but I didn't see any difference. I then took a look at some of the other portlets and found one with the same kind of action and did get the same error. It also did not have redirect="true". Is there some other way that the ActionForward gets redirect=true set?

The ClassCastException happens because Liferay has a parameter in the original url of p_p_action="1" identifying the url ash an action. When the url is reused I believe that parameter is still there. Liferay then checks for that in LayoutAction to determine whether to do some stuff related to actions and gets the ClassCastException because it is trying to cast the RenderRequestImpl to an ActionRequestImpl. So I believe this is a direct result of the Warning in StrutsPortlet.

Ralph

Ate Douma wrote:
Ralph, comments below.

Ralph Goers wrote:
I could really use some help debugging an issue with one of our struts portlets. It is using V1.0 of the portlet bridge and it gets errors in the logs when a drop-down is selected to change from one month to another. I'm not a struts expert by any means (I've never even built a struts app myself) and I could use some direction on what I should be looking for. I've spent days looking at the StrutsPortlet and related code and am no closer to figuring out how the REDIRECT_URL or REDIRECT_PAGE_URL are supposed to be set or whether something else should be happening.

FWIW, this is one of about 6 Struts apps using the struts bridge and only this one exhibits this problem.

The two messages that are of concern are the WARN message from StrutsPortlet
The WARN from StrutsPortlet is logged when an StrutsAction, invoked from a processAction does *not* send a redirect at the end.
See for further information:
http://portals.apache.org/bridges/multiproject/portals-bridges-struts/features.html#Handling_ActionRequests

You should look at the returned ActionForward from this StrutsAction call, that one needs to have redirect=true configured. It might be helpful if you can provide the struts-config.xml, maybe I can give a more specific advise then.

and the ClassCastException in Liferay's LayoutAction. I've run that under the debugger and the code that is being run there expects an ActionRequestImpl, not a RenderRequestImpl.
From the logging I can't make anything from this, and I don't know Liferay myself.

Regards,

Ate


2007-12-20 16:08:38,822 DEBUG [org.apache.portals.bridges.struts.StrutsPortlet] process path: /portlet_action/HBNPortlet/spendingReport, requestType: VIEW 2007-12-20 16:08:39,107 DEBUG [org.apache.portals.bridges.struts.PortletServletRequestDispatcher] invoking dispatch to :/html/spendingReport.jsp, from VIEW null 2007-12-20 16:09:49,569 DEBUG [org.apache.portals.bridges.struts.StrutsPortlet] process path: /portlet_action/HBNPortlet/spendingReport, requestType: ACTION 2007-12-20 16:09:49,891 DEBUG [org.apache.portals.bridges.struts.PortletServletRequestDispatcher] saving dispatch to :/html/spendingReport.jsp, from ACTION /portlet_action/HBNPortlet/spendingReport 2007-12-20 16:09:49,894 WARN [org.apache.portals.bridges.struts.StrutsPortlet] Warning: Using the original action URL for render URL: /portlet_action/HBNPortlet/spendingReport.
A redirect should have been issued.
2007-12-20 16:09:49,959 DEBUG [org.apache.portals.bridges.struts.StrutsPortlet] process path: /portlet_action/HBNPortlet/spendingReport, requestType: VIEW 2007-12-20 16:09:49,960 DEBUG [org.apache.portals.bridges.struts.PortletServlet] render context path: /html/spendingReport.jsp 2007-12-20 16:09:49,961 DEBUG [org.apache.portals.bridges.struts.PortletServlet] Putting form org.apache.struts.validator.DynaValidatorForm into request as for mapping yearMonthForm 2007-12-20 16:09:49,961 DEBUG [org.apache.portals.bridges.struts.PortletServletRequestDispatcher] invoking dispatch to :/html/spendingReport.jsp, from VIEW /portlet_action/HBNPortlet/spendingReport 2007-12-20 16:09:50,007 ERROR [com.liferay.portal.action.LayoutAction] java.lang.ClassCastException: com.liferay.portlet.RenderRequestImpl 2007-12-20 16:09:50,007 ERROR [com.liferay.portal.action.LayoutAction] java.lang.ClassCastException: com.liferay.portlet.RenderResponseImpl

Ralph


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

<?xml version="1.0"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd";>

<tiles-definitions>
	<definition name="portlet.HBNPortlet.retrievePrjTxnGenerators" path="/html/listRecurringTransactions.jsp"/>
	<definition name="portlet.HBNPortlet.retrievePayeesAndCategories" path="/html/addTransactions.jsp"/>
	<definition name="portlet.HBNPortlet.editTransactionGenerator" path="/html/editTransactionGenerator.jsp"/>
	<definition name="portlet.HBNPortlet.spendingReport" path="/html/spendingReport.jsp"/>
	<definition name="portlet.HBNPortlet.addTransactionLink" path="/html/addTransactionLink.jsp"/>
	<definition name="portlet.HBNPortlet.pendingList" path="/html/pendingList.jsp"/>
	<definition name="portlet.HBNPortlet.accountSummary" path="/html/accountSummary.jsp"/>
	<definition name="portlet.HBNPortlet.toDoList" path="/html/toDoList.jsp"/>
	<definition name="portlet.HBNPortlet.postedListAction" path="/html/postedList.jsp"/>
	<definition name="portlet.HBNPortlet.retrievePostedTransactionAction" path="/html/postedTransactionDetail.jsp"/>
	<definition name="portlet.HBNPortlet.retrieveOneTimeTransactionAction" path="/html/editOneTimeTransaction.jsp"/>
	<definition name="portlet.HBNPortlet.disclosureAction" path="/html/disclosure.jsp"/>
</tiles-definitions>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd";>
<struts-config>
	<form-beans>
		<form-bean name="deleteTransactionForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="generatorId" type="java.lang.String"/>
	        <form-property name="token" type="java.lang.String"/>
		</form-bean>

        <form-bean name="deletePendingTransactionForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="generatorId" type="java.lang.String"/>
		</form-bean>

		<form-bean name="disclosureForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="disclosureDetail" type="java.lang.String"/>
			<form-property name="disclosureBalance" type="java.lang.String"/>
			<form-property name="asOfDate" type="java.lang.String"/>
		</form-bean>

        <form-bean name="addTransactionsForm" type="org.apache.struts.validator.DynaValidatorForm">
			<form-property name="transactionType" type="java.lang.String"/>
			<form-property name="payeeId" type="java.lang.String"/>
			<form-property name="payeeName" type="java.lang.String"/>
			<form-property name="payeeDescription" type="java.lang.String"/>
			<form-property name="categoryId" type="java.lang.String"/>
			<form-property name="categoryName" type="java.lang.String"/>
			<form-property name="save" type="java.lang.String"/>
			<form-property name="checkNum" type="java.lang.String"/>
			<form-property name="samePaymentAmount" type="java.lang.String"/>
			<form-property name="paymentAmount" type="java.lang.String"/>
			<form-property name="approxyPaymentAmount" type="java.lang.String"/>
			<form-property name="firstPaymentAmount" type="java.lang.String"/>
			<form-property name="lastPaymentAmount" type="java.lang.String"/>
			<form-property name="paymentType" type="java.lang.String"/>
			<!--SAME_AMOUNT, LAST_PAYMENT_NO, NOT_SAME_AMOUNT)-->
			<form-property name="oneTimeDate" type="java.lang.String"/>
			<form-property name="oneTimeDateHidden" type="java.lang.String"/>
			<form-property name="startDate" type="java.lang.String"/>
			<form-property name="startDateHidden" type="java.lang.String"/>
			<form-property name="frequency" type="java.lang.String"/>
			<form-property name="endCondition" type="java.lang.String"/>
			<!--changeOrCancel, timesReached, dateReached-->
			<!--form-property name="totalTimes" type="java.lang.String"/-->
			<form-property name="endDate2" type="java.lang.String"/>
			<!--avoid conflict with URL accountDetail endDate parameter-->
			<form-property name="action" type="java.lang.String"/>
			<form-property name="fromPage" type="java.lang.String"/>
	        <form-property name="token" type="java.lang.String"/>
		</form-bean>

		<form-bean name="editTransactionsForm" type="org.apache.struts.validator.DynaValidatorForm">
			<form-property name="transactionType" type="java.lang.String"/>
			<form-property name="payeeId" type="java.lang.String"/>
			<form-property name="payeeName" type="java.lang.String"/>
			<form-property name="payeeDescription" type="java.lang.String"/>
			<form-property name="categoryId" type="java.lang.String"/>
			<form-property name="categoryName" type="java.lang.String"/>
			<form-property name="save" type="java.lang.String"/>
			<form-property name="checkNum" type="java.lang.String"/>
			<form-property name="samePaymentAmount" type="java.lang.String"/>
			<form-property name="approxyPaymentAmount" type="java.lang.String"/>
			<form-property name="firstPaymentAmount" type="java.lang.String"/>
			<form-property name="lastPaymentAmount" type="java.lang.String"/>
			<form-property name="paymentType" type="java.lang.String"/>
			<!--SAME_AMOUNT, LAST_PAYMENT_NO, NOT_SAME_AMOUNT)-->
			<form-property name="oneTimeDate" type="java.lang.String"/>
			<form-property name="startDate" type="java.lang.String"/>
			<form-property name="frequency" type="java.lang.String"/>
			<form-property name="endCondition" type="java.lang.String"/>
			<!--changeOrCancel, timesReached, dateReached-->
			<form-property name="totalTimes" type="java.lang.String"/>
			<form-property name="endDate2" type="java.lang.String"/>
			<!--avoid conflict with URL accountDetail endDate parameter-->
			<form-property name="action" type="java.lang.String"/>
			<form-property name="fromPage" type="java.lang.String"/>
			<form-property name="navigation" type="java.lang.String"/>
			<form-property name="generatorId" type="java.lang.String"/>
			<form-property name="generatorType" type="java.lang.String"/>
	        <form-property name="token" type="java.lang.String"/>
		</form-bean>

		<form-bean name="todoForm" type="com.intuit.testBank.web.util.TodoForm">
			<form-property name="transactions" type="com.intuit.testBank.web.util.TransactionBean[]"/>
			<form-property name="calendarTransactions" type="com.intuit.testBank.web.util.TransactionBean[]"/>
			<form-property initial="0" name="txnsize" type="java.lang.String"/>
			<form-property initial="0" name="calendarTxnSize" type="java.lang.String"/>
			<form-property initial="0" name="ledgerBalance" type="java.lang.Double"/>
			<form-property initial="0" name="availableBalance" type="java.lang.Double"/>
			<form-property name="action" type="java.lang.String"/>
			<form-property name="selectedDate" type="java.lang.String"/>
			<form-property name="cells" type="java.util.List"/>
			<form-property name="calendarWeeks" type="java.lang.String"/>
			<form-property name="hasPastTransactions" type="java.lang.String"/>
			<form-property name="validationErrorMessages" type="java.lang.String"/>
	        <form-property name="token" type="java.lang.String"/>			
		</form-bean>

		<form-bean name="yearMonthForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="month" type="java.lang.String"/>
			<form-property name="year" type="java.lang.String"/>
			<form-property name="month2" type="java.lang.String"/>
			<form-property name="year2" type="java.lang.String"/>
			<form-property name="oldMonth" type="java.lang.String"/>
			<form-property name="oldYear" type="java.lang.String"/>
			<form-property name="oldMonth2" type="java.lang.String"/>
			<form-property name="oldYear2" type="java.lang.String"/>
	        <form-property name="token" type="java.lang.String"/>			
		</form-bean>
		<form-bean name="accountSummaryForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="accountId" type="java.lang.String"/>
			<form-property name="accountTooltip" type="java.lang.String"/>
			<form-property name="postedBalance" type="java.lang.String"/>
			<form-property name="realBalance" type="java.lang.String"/>
			<form-property name="accountDetails" type="com.intuit.testBank.web.util.AccountSummaryBean"/>
	        <form-property name="token" type="java.lang.String"/>
		</form-bean>
		<form-bean name="postedTransactionForm" type="org.apache.struts.validator.DynaValidatorForm">
			<form-property name="transactionId" type="java.lang.String"/>
			<form-property name="postedDate" type="java.lang.String"/>
			<form-property name="postedAmount" type="java.lang.String"/>
			<form-property name="isReconciled" type="java.lang.Boolean"/>
			<form-property name="description" type="java.lang.String"/>
			<form-property name="direction" type="java.lang.String"/>
			<form-property name="categoryId" type="java.lang.String"/>
			<form-property name="checkNumber" type="java.lang.String"/>
			<form-property name="checkImage" type="java.lang.String"/>
			<form-property name="categoryName" type="java.lang.String"/>
			<form-property name="payee" type="java.lang.String"/>
			<form-property name="action" type="java.lang.String"/>
			<form-property name="userDate" type="java.lang.String"/>
			<form-property name="pendingTransactionType" type="java.lang.String"/>
			<form-property name="pendingPayee" type="java.lang.String"/>
			<form-property name="pendingDate" type="java.lang.String"/>
			<form-property name="pendingAmount" type="java.lang.String"/>
			<form-property name="projectedTransactionType" type="java.lang.String"/>
	        <form-property name="token" type="java.lang.String"/>			
		</form-bean>
		<form-bean name="editOneTimeTransactionForm" type="org.apache.struts.validator.DynaValidatorForm">
			<form-property name="tid" type="java.lang.String"/>
			<form-property name="paymentAmount" type="java.lang.String"/>
			<form-property name="paymentType" type="java.lang.String"/>			
			<form-property name="payeeId" type="java.lang.String"/>
			<form-property name="payeeName" type="java.lang.String"/>
			<form-property name="payeeDescription" type="java.lang.String"/>
			<form-property name="oldPayeeDescription" type="java.lang.String"/>
			<form-property name="categoryId" type="java.lang.String"/>
			<form-property name="checkNumber" type="java.lang.String"/>
			<form-property name="projectedDateOneTime" type="java.lang.String"/>
			<form-property name="oldDate" type="java.lang.String"/>
			<form-property name="status" type="java.lang.String"/>
			<form-property name="direction" type="java.lang.String"/>
			<form-property name="statusDescription" type="java.lang.String"/>
			<form-property name="transactionType" type="java.lang.String"/>
			<form-property name="frequency" type="java.lang.String"/>
			<form-property name="navigation" type="java.lang.String"/>
			<form-property name="generatorId" type="java.lang.String"/>
			<form-property name="generatorType" type="java.lang.String"/>
			<form-property name="fromPage" type="java.lang.String"/>
			<form-property name="overdueMessage" type="java.lang.String"/>
	        <form-property name="token" type="java.lang.String"/>
		</form-bean>
		<form-bean name="postedListForm" type="com.intuit.testBank.web.util.TodoForm">
			<form-property name="transactions" type="com.intuit.testBank.web.util.PostedTransactionBean[]"/>
			<form-property name="txnsize" type="java.lang.String"/>
		</form-bean>
	</form-beans>

	<global-forwards>
		<forward name="failure" path="/html/errorPage.jsp"/>
	</global-forwards>

	<action-mappings>

		<action path="/HBNPortlet/retrievePrjTxnGenerators" scope="request" type="com.intuit.testBank.web.RetrievePrjTxnGeneratorsAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.retrievePrjTxnGenerators"/>
		</action>

		<action name="todoForm" path="/HBNPortlet/toDoList" scope="request" type="com.intuit.testBank.web.ToDoListAction" validate="false">
			<forward name="success" path="portlet.HBNPortlet.toDoList"/>
		</action>

		<action name="addTransactionsForm" path="/HBNPortlet/retrievePayeesAndCategories" scope="request" type="com.intuit.testBank.web.RetrievePayeesAndCategoriesAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.retrievePayeesAndCategories"/>
		</action>

		<action input="/HBNPortlet/toDoList" name="todoForm" path="/HBNPortlet/makePayments" scope="request" type="com.intuit.testBank.web.MakePaymentsAction" unknown="false" validate="true">
			<forward name="success" path="/portlet_action/HBNPortlet/toDoList" redirect="true"/>
		</action>

		<action input="/HBNPortlet/retrievePayeesAndCategories" name="addTransactionsForm" path="/HBNPortlet/addTransactions" scope="request" type="com.intuit.testBank.web.AddTransactionsAction" unknown="false" validate="true">
			<forward name="success" path="/portlet_action/HBNPortlet/retrievePayeesAndCategories" redirect="true"/>
			<forward name="successRecurringTransactions" path="/portlet_action/HBNPortlet/retrievePrjTxnGenerators" redirect="true"/>
			<forward name="successAddTransactionLink" path="/portlet_action/HBNPortlet/addTransactionLink" redirect="true"/>
		</action>

		<action name="editTransactionsForm" path="/HBNPortlet/editTransactions" scope="request" type="com.intuit.testBank.web.EditTransactionsAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.editTransactionGenerator"/>
		</action>

		<action input="portlet.HBNPortlet.editTransactionGenerator" name="editTransactionsForm" path="/HBNPortlet/updateTransactions" scope="request" type="com.intuit.testBank.web.UpdateTransactionsAction" unknown="false" validate="true">
			<forward name="success" path="/portlet_action/HBNPortlet/toDoList" redirect="true"/>
			<forward name="fromRecurringList" path="/portlet_action/HBNPortlet/retrievePrjTxnGenerators" redirect="true"/>
			<forward name="pendingList" path="/portlet_action/HBNPortlet/pendingList" redirect="true"/>
			<forward name="toDoList" path="/portlet_action/HBNPortlet/toDoList" redirect="true"/>
		</action>

		<action name="deleteTransactionForm" path="/HBNPortlet/deletePrjTxnGenerator" scope="request" type="com.intuit.testBank.web.DeletePrjTransactionAction" unknown="false" validate="false">
			<forward name="deletesuccess" path="/portlet_action/HBNPortlet/retrievePrjTxnGenerators" redirect="true"/>
		</action>

        <action name="deletePendingTransactionForm" path="/HBNPortlet/deletePendingTransaction" scope="request" type="com.intuit.testBank.web.DeletePendingTransactionAction" unknown="false" validate="false">
			<forward name="deletesuccess" path="/portlet_action/HBNPortlet/pendingList" redirect="true"/>
		</action>

        <action attribute="" name="yearMonthForm" path="/HBNPortlet/spendingReport" scope="request" type="com.intuit.testBank.web.SpendingReportAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.spendingReport"/>
		</action>

		<action path="/HBNPortlet/addTransactionLink" scope="request" type="com.intuit.testBank.web.RetrieveAddTransactionLinkAction" unknown="false" validate="false">
            <forward name="success" path="portlet.HBNPortlet.addTransactionLink"/>
		</action>

		<action name="accountSummaryForm" path="/HBNPortlet/accountSummaryAction" scope="request" type="com.intuit.testBank.web.AccountSummaryAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.accountSummary"/>
		</action>

		<action attribute="" path="/HBNPortlet/pendingList" scope="request" type="com.intuit.testBank.web.PendingListAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.pendingList"/>
		</action>

		<action name="postedListForm" path="/HBNPortlet/postedListAction" scope="request" type="com.intuit.testBank.web.PostedListAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.postedListAction"/>
		</action>

		<action name="postedTransactionForm" path="/HBNPortlet/retrievePostedTransactionAction" scope="request" type="com.intuit.testBank.web.RetrievePostedTransactionAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.retrievePostedTransactionAction"/>
		</action>

		<action input="portlet.HBNPortlet.retrievePostedTransactionAction" name="postedTransactionForm" path="/HBNPortlet/postedTransactionAction" scope="request" type="com.intuit.testBank.web.PostedTransactionAction" unknown="false" validate="true">
			<forward name="success" path="/portlet_action/HBNPortlet/postedListAction" redirect="true"/>
		</action>

		<action name="editOneTimeTransactionForm" path="/HBNPortlet/retrieveOneTimeTransactionAction" scope="request" type="com.intuit.testBank.web.RetrieveOneTimeTransactionAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.retrieveOneTimeTransactionAction"/>
		</action>

		<action input="portlet.HBNPortlet.retrieveOneTimeTransactionAction" name="editOneTimeTransactionForm" path="/HBNPortlet/editOneTimeTransactionAction" scope="request" type="com.intuit.testBank.web.EditOneTimeTransactionAction" unknown="false" validate="true">
			<forward name="success" path="/portlet_action/HBNPortlet/toDoList" redirect="true"/>
		</action>

		<action name="disclosureForm" path="/HBNPortlet/disclosureAction" scope="request" type="com.intuit.testBank.web.DisclosureAction" unknown="false" validate="false">
			<forward name="success" path="portlet.HBNPortlet.disclosureAction"/>
		</action>


	</action-mappings>

	<controller processorClass="com.intuit.testBank.portal.struts.IntuitPortletTilesRequestProcessor"/>
  <message-resources factory="com.diginsite.services.i18n.TieredMessageResourcesFactory" parameter="PFWMessages"/>

	


	<plug-in className="org.apache.struts.tiles.TilesPlugin">
		<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
		<set-property property="moduleAware" value="true"/>
		<set-property property="definitions-parser-validate" value="true"/>
	</plug-in>

	<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
		<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
	</plug-in>

</struts-config>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to