Refresh condition of invoke action
Hi,
I'm working with ADF 11g JDeveloper 11.1.2.2.0.
I am facing problem with invoke Action.I have a jspx page that contains a table. I have created a method in AM and calling it when the page load. I have created invoke action, then made it the first one to be executed. In the definition page (xml) the code is :
<invokeAction id="invoke" Binds="getEmployeesInDept" Refresh="prepareModelIfNeeded"/>
I want the invokeAction to run ONLY the first time when the page is rendered. I think refresh condition has to handle this. Which condition I should give? So that my method will get executed only when the page is rendered.
Hi,
have you tried with setting
RefreshCondition=#{adfFacesContext.postback==false}and
Refresh="prepareModel"you can also have a look at http://hazem-adf-tips.blogspot.in/2012/10/how-to-deal-with-invokeaction-refresh.html
~Abhijit
Similar Messages
-
ADF Faces & BC: PPR and refresh condition on pagedef executables.
Hi all,
I'm running into some problems on my page when a command button is pressed. It's partialSubmit attribute is set to true, it seems that iterators/invokeActions within my pageDef are re-executed and thus resetting the index iterator cursor to its original position which leads to the following two messages:
Jun 2, 2008 5:34:57 PM oracle.adfinternal.view.faces.model.binding.FacesCtrlRangeBinding$FacesModel setRowKey
WARNING: row is null for rowKey:oracle.jbo.Key[TEST_MN 00123456 2008-05-08 98 98 4 ]
Jun 2, 2008 5:34:57 PM oracle.adfinternal.view.faces.model.binding.FacesCtrlRangeBinding$FacesModel makeCurrent
My pageDef code:
<iterator id="MasterVoIterator" RangeSize="10"
Binds="MasterVo"
DataControl="AppModule" />
<iterator id="DetailVoIterator" RangeSize="10"
Binds="DetailVo"
DataControl="AppModule" />
<invokeAction Binds="invokeInitValues" id="initValues"/>
I would like to know how to setup the refresh property under the following scinero:
1. when the page shows up for the first time:
MasterVoIterator - invoke
DetailVoIterator - invoke
invokeInitValues - invoke
2. When a show/hide button is used to display the detail rows is clicked:
MasterVoIterator - do nothing
DetailVoIterator - invoke // to refresh the detail records.
invokeInitValues - do nothing
Here is a pic of the component I am working with:
http://i108.photobucket.com/albums/n23/zeoneozero/mrbhelp.jpg
Any advice is appreciated
Thanks,
WesHi,
use
${!adfFacesContext.postback}
as the refresh condition property value to avoid a refresh on postback (when a button is clicked)
Frank -
ADF Task Flow Binding - Refresh ifNeeded being invoked even WITHOUT any Parameter change
Using JDeveloper 11.1.1.6.0
Issue: Task Flow Binding property "refresh = ifNeeded" seems to be triggered even without the mutation of the input parameter.
As per definition, "ifNeeded: refresh the ADF Region if the value of a task flow binding parameter changes." (Reference: 17.5 Refreshing an ADF Region)
Now for the setup which reproduces the issue.
I'll focus at the fragment bounded task flow level and will skip the jspx side.
taskflow: main-flow.xml
contains a single fragment mainFgmt.jsff
has a managed bean defined SampleBean.java as pageFlow scope.
taskflow: sub-flow.xml
contains a single fragment subFgmt.jsff
has an inputParameter SampleBean.java (because it is an input parameter, by default it will be at pageFlow scope)
!important - has a nested taskflow (task flow call as defined in the component pallete) called inner-flow (see below)
the nested taskflow is the default activity
the nested taskflow has an outcome pointing to subFgmt where outcome = "return"
taskflow: inner-flow.xml
contains a single fragment called stop.jsff
has a return activity without outcome = "return"
stop.jsff has a navigation pointing to the outcome.
Finally mainFgmt.jsff has a task flow binding (pageDef)
with id = "sub-flow.xml"
refresh = "ifNeeded"
parameter SampleBean being submitted as sub-flow's input parameter. (id=sampleBean, value=#{pageFlowScope.mainSampleBean})
Assume that code compiles.
In this scenario where the only tricky condition is the inner nesting (defined by !important), when the inner nesting decides to invoke its outcome to visit sub-flow's fragment, mainFgmt is restarting its taskflow which makes sub-flow start over again.
Another way of saying it is, if sub-flow starts a nested activity and that nested activity exits out to utilize sub-flow's view. The high level definition which is mainFgmt's refresh ifNeeded is restarting sub-flow.
In the above example if you notice, the bean (SampleBean) is not really being utilized except that it is completing the purpose of refresh=ifNeeded. This scenario is only to simplify the setup - in practical use this bean will be mutated to be utilized as a refresh mechanism.
Now interestingly, if I change the pattern a bit then the issue will not happen:
Don't use the nested taskflow (inner-flow) as the default activity, let a fragment of sub-flow hold the initial view.
Navigate to the nested flow.
Exit nested flow.
Everything works.
Now in this scenario, it seems like the sub-flow needs to have a view established first for it to be properly be used.
So my questions are as follows:
Can I consider the behavior of the refresh=ifNeeded as a bug in this usecase?
Would it be better to utilize a different way of refreshing (maybe combination of refresh condition) to get around the issue?
Is the use of the task flow as defined logical or does it cross any boundary or best practice that might be causing this behavior?Hi,
actually you lost me in your description due to complexity. I lived under assumption that sub-flow already is a region on a view in main flow, but then you sad that
"!important - has a nested taskflow (task flow call as defined in the component pallete) called inner-flow (see below)"
which then confused me as to I have no idea if inner flow now is the second level nesting or first level nesting (should be second level nesting). If sub-flow is a region then having "has an inputParameter SampleBean.java (because it is an input parameter, by default it will be at pageFlow scope)" is an unnecessary broad scope because the region wont live longer than view scope.
Anyway, it seems that a region refresh is triggered by the lifecycle involved, which can be by design or a bug. I suggest you file a Service Request with support and provide a test case as purely from the description, its hard to parse and understand what is going on.
Frank -
ADF Faces refresh conditions cause NullPointerException
We are developping an ADF faces web application. For the jspx pages we use EJB3 data controls to display data from the database and other legacy systems.
Most values in our application are read-only and some take some time to be provided by the database. To increase performance of our web application we decided to change the refresh condition from Refresh="ifNeeded" to Refresh="renderModelIfNeeded". The parameters of the bindings should not change so this seemed to be o.k. for our needs. To avoid the call during postbacks we added RefreshCondition="${!adfFacesContext.postback}".
<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
version="10.1.3.41.57" id="app_pagePageDef"
Package="web.pageDefs"
EnableTokenValidation="false">
<methodIterator id="findSomething"
Binds="findSomething.result"
DataControl="GatewayLocal" RangeSize="-1"
BeanClass="entities.MyObject"
RefreshCondition="${!adfFacesContext.postback}"
Refresh="renderModelIfNeeded"/>
Performance is now really good and all data is displayed.
On the other hand we now experience a strange behaviour and from time to time we get the following error message:
07/10/30 14:02:37 java.lang.NullPointerException
07/10/30 14:02:37 at oracle.jbo.uicli.binding.JUCtrlListBinding.findListIndex(JUCtrlListBinding.java:1096)
07/10/30 14:02:37 at oracle.jbo.uicli.binding.JUCtrlListBinding.setValueAt(JUCtrlListBinding.java:1726)
07/10/30 14:02:37 at oracle.jbo.uicli.binding.JUCtrlListBinding.updateValuesFromRow(JUCtrlListBinding.java:1339)
07/10/30 14:02:37 at oracle.jbo.uicli.binding.JUIteratorBinding.navigated(JUIteratorBinding.java:282)
07/10/30 14:02:37 at oracle.jbo.common.RowSetHelper.fireNavigationEvent(RowSetHelper.java:261)
07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.notifyNavigationEvent(DCRowSetIteratorImpl.java:1611)
07/10/30 14:02:37 at oracle.adf.model.generic.DCGenericRowSetIteratorImpl.notifyNavigationEvent(DCGenericRowSetIteratorImpl.java:313)
07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.syncIterator(DCRowSetIteratorImpl.java:258)
07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.first(DCRowSetIteratorImpl.java:653)
07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.refreshControl(DCIteratorBinding.java:649)
07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.rangeRefreshed(DCIteratorBinding.java:735)
07/10/30 14:02:37 at oracle.jbo.common.RowSetHelper.fireRangeRefreshed(RowSetHelper.java:172)
07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.notifyRangeRefreshed(DCRowSetIteratorImpl.java:1570)
07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.buildProviderIterator(DCRowSetIteratorImpl.java:465)
07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.fetchDataSource(DCRowSetIteratorImpl.java:394)
07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.getRowAtAbsoluteIndex(DCRowSetIteratorImpl.java:1008)
07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.syncIterator(DCRowSetIteratorImpl.java:225)
07/10/30 14:02:37 at oracle.adf.model.generic.DCRowSetIteratorImpl.first(DCRowSetIteratorImpl.java:653)
07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.internalGetCurrentRowInBinding(DCIteratorBinding.java:1919)
07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.getCurrentRow(DCIteratorBinding.java:1866)
07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.prepareCurrentRow(DCIteratorBinding.java:548)
07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.refreshControl(DCIteratorBinding.java:683)
07/10/30 14:02:37 at oracle.adf.model.binding.DCIteratorBinding.refresh(DCIteratorBinding.java:3499)
07/10/30 14:02:37 at oracle.adf.model.binding.DCBindingContainer.refreshExecutables(DCBindingContainer.java:2637)
07/10/30 14:02:37 at oracle.adf.model.binding.DCBindingContainer.internalRefreshControl(DCBindingContainer.java:2568)
07/10/30 14:02:37 at oracle.adf.model.binding.DCBindingContainer.refresh(DCBindingContainer.java:2260)
07/10/30 14:02:37 at oracle.adf.controller.v2.lifecycle.PageLifecycleImpl.prepareRender(PageLifecycleImpl.java:534)
07/10/30 14:02:37 at oracle.adf.controller.faces.lifecycle.FacesPageLifecycle.prepareRender(FacesPageLifecycle.java:99)
07/10/30 14:02:37 at oracle.adf.controller.v2.lifecycle.Lifecycle$1.execute(Lifecycle.java:297)
07/10/30 14:02:37 at oracle.adf.controller.v2.lifecycle.Lifecycle.executePhase(Lifecycle.java:116)
07/10/30 14:02:37 at oracle.adf.controller.faces.lifecycle.ADFPhaseListener.mav$executePhase(ADFPhaseListener.java:29)
07/10/30 14:02:37 at oracle.adf.controller.faces.lifecycle.ADFPhaseListener$1.before(ADFPhaseListener.java:426)
07/10/30 14:02:37 at oracle.adf.controller.faces.lifecycle.ADFPhaseListener.beforePhase(ADFPhaseListener.java:77)
07/10/30 14:02:37 at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:192)
07/10/30 14:02:37 at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
07/10/30 14:02:37 at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
07/10/30 14:02:37 at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:228)
07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:197)
07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:123)
07/10/30 14:02:37 at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:103)
07/10/30 14:02:37 at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:15)
07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:228)
07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:197)
07/10/30 14:02:37 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:123)
07/10/30 14:02:37 at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:103)
07/10/30 14:02:37 at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:17)
07/10/30 14:02:37 at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:162)
07/10/30 14:02:37 at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:17)
07/10/30 14:02:37 at oracle.security.jazn.oc4j.JAZNFilter.doFilter(JAZNFilter.java:436)
07/10/30 14:02:37 at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:621)
07/10/30 14:02:37 at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
07/10/30 14:02:37 at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
07/10/30 14:02:37 at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
07/10/30 14:02:37 at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:302)
07/10/30 14:02:37 at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:190)
07/10/30 14:02:37 at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
07/10/30 14:02:37 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
07/10/30 14:02:37 at java.lang.Thread.run(Thread.java:595)
Has anyone seen this error before or can anyone explain this error? This problem is mission criticle to us so any help is appreciated. Without the boost of performance and unnecessary callbacks the application is just unusable.
Thanks in advance,
RobertHi Frank,
it seems that this issue is dependent to the renderModelIfNeeded phase. I still have no explanation for this behaviour. For now I've changed our implementation to use the prepareModel phase but I'm still not happy with the ADF phase implementation and documentation. Some methods that we use in the backend are called many times.
I'll keep on trying to find a solution...
Thanks
Robert -
Can I use conditional and advanced actions on the same button?
I'm fairly new to Captivate, but come from a background of flash and am struggling to use Captivate to do some things I would have expected to be fairly simple and a normal requirement.
I want to create a screen with a number of interactive objects, in this case pictures, that the learner clicks on to display a piece of text.
On clicking the next picture the first piece of text is hidden and a second piece shown.
There are 6 pictures/buttons that need to work this way.
However I also want to assess whether all the buttons have been used, as we have to force the user to view the entire slide before they continue.
I can do the hide/show of text and buttons, and I've written a conditional action to check the variables for each button. However I don't know how/when to call this action.
I was hoping that in my advanced action for each button I could add in a call to the conditional 'check variables' action, which would nicely fulfil this requirement, however this doesn't seem to be the case.
I have also got animation/effects on the timeline before the images are on screen meaning I don't want to go back to the start of the timeline to use a 'on enter' event.
I'm surprised this isn't something more people need as although it may be frowned upon out in the e-learning field, disabled navigation is frankly not going away and working for any large corporation will be a must.
If anyone can shed some light on this, or maybe suggest a better approach then I would appreciate it.
Thanks.Hi Lilybiri,
Thank you for this, I suspected that this was going to be the way I would have to progress.
I have to ask though, at present the company I work for uses a very straight forward off the shelf WYSIWYG elearning content designer.
One of the core template pages is a hotspot page, which works in the way I have explained at the top.
This is also one of the standard e-learning pages I have used in all my other positions, including when building in Flash.
It seems incredible to me that to do such a simple, commonly used, page type we will require what is a fairly involved process rather than this being one of the page types or templates.
I am currently trying to pilot Captivate to show how much better it is to the current product, however the other designers have no programming background and I think will stuggle with the conditional actions, meaning that this is pretty much going to be a no go which I'm gutted about...
I think I stand a chance of teaching advanced actions but anything beyond that is unlikely initially.
RodWard, thanks for your comments, I'm finding the actions ok in Captivate, as I say above I'm just amazed that this simple and commonly used page is so convoluted to create!
My other frustration is the lack of control of the events, not being able to specify x and y for motions etc. but I'm finding work arounds...
Is there a way to create my own page template? Could I write all the actions and bundle that into a page to provide the other designers so with some naming conventions they could use this functionality?
Thanks for your help.
Matt -
Conditional option for Action link in OBIEE 11G
Hi
I am unable to select the conditional option for action links on a column(s) in 11g. Please help me with a solution to this or information on this.
ThanksHi,
What error are you getting? Or the conditional option is invisible?
Regards,
Arul -
Adobe Configurator - how to invoke action or script from html widget?
How to invoke action or script from html wiget in Adobe Configurator?
Please help! I tried to make it about 5 hours!
I need something like that:
I click link or image
...and it runs action.
Thanks!If you click on the question mark ( as shown below) on the right of Configurator 2 window
the user guide installed on your computer within Configurator 2 will open
Anyway once you have your action or script button in your panel you must select it and configure it in the inspector palette -
Conditions for triggering actions - times in SLA
Dear CRM experts,
I'm configuring actions in SAP CRM 2007 - Service Scenario: in particular, I'm trying to configure actions for triggering of e-mails when SLA deadlines are reached.
Let's assume that the following are the dates in my service ticket:
Opening of the ticket --> 10/05/09 - 10:15 A.M.
First level of escalation --> 10/05/09 - 02:15 P.M.
To Do By --> 10/05/09 - 06:15 P.M.
When I write the Starting Condition for the action, I can only compare the Date Types (Opening of the ticket , First level of escalation, To Do By ) with the Local Date of the System...
The problem is that the condition considers only the DATE(10/05/09), but not the TIME!!
But in our scenarios, the time is a critical parameter!
Any idea on how to solve my problem?
Thanks in advance,
regards,
Andrea RicciDear Andrea,
I have similar requirement,Where as i have maintained the first respone as date type and in duration i have maintained 15 Min.
Where as in action condition I have maintained Fisrt response<current date. Notification receipt as Todays date and time.
Please guid me in details.
Regards
Ashwin -
Refer to Tabular Form field in Condition of Dynamic Action
I tried to filter on this topic but didn't come up with anything.
Is there a way to refer to a field in a tabular form as a condition of a dynamic action?
For example, I want to pop up a message (javascript 'alert') when the value of one field in a tabular form is changed, but only if another field for that same row meets a certain condition. So let's say the field in the condition is XYZ. So in the condition section, i would have PL/SQL Expression - XYZ IS NULL. Something like that. How would I refer to that XYZ field from my tabular form in the condition section of a dynamic action?
Thanks in advance.
JohnThanks for your help on this. I think going with the action being an 'execute javascript code' is a good approach. So here is my situation - I have a tabular form. I have 2 fields (among others) - SPECIES and WEIGHT. The SPECIES is a select list in the tabular form. The WEIGHT is a text box in the tabular form.
To make this simple, let's say this is for only one species - SNSG. If the person changes the select list to SNSG and the associated WEIGHT field is NULL, I need to pop up a message that says 'Fill in weight field if selecting SNSG'.
So here is what I have:
Event: Change
Selection Type: jQuery Selector
jQuery Selector: :.speciesClass
Condition: In List
Value: SNSG
True Action: Execute JavaScript Code
** Here is where I am stuck: In the JavaScript code I need to this:
If WEIGHT is null THEN:
confirm('Warning: Enter weight if entering SNSG species.');
I am not sure how to write that "If WEIGHT is null THEN" part in javaScript and be able to refer to the WEIGHT field associated with the SPECIES value I just changed in the tabular form.
I hope that makes sense!
I appreciate your help!!
Thanks,
John -
Start condition of an Action (Actions in Transaction)
Could anyone tell me how to make an action dependent on another action. That is, the second action should be trigerred only when the first action was performed sucessfully.
thanks in advance
JHi Ark,
Two solutions I can suggest :
1. Use Method Call for first Action definition to send email. While after sending
email, inside this method you can trigger next action
Or
You can also tell from this method to set certain user status (for example
from user status = Sending Email to user status = Email sent)
Then use this user status condition in your next Action Definition (if user
status = Email Sent)
2. You enhance the business object, for example business object order
BUS2000115, you add one attribute to keep value of certain Action Definition
status (additional Method also will be needed here to search and store that
Action Definition status to your new attribute).
Then, you use this new enhance business object in ACTION Condition - object
type. You can enhance business object use tcode SW01
Hope this could help.
Gun. -
Trasnporting the Condition in the Action Profile
I have defined an action profile Activity for sending the email automatically when saving an activity.
I defined the condition for the Remainder email to send in the Tcode CRMC_ACTION_CONF.
But I am not able to transport the defined Condition from the Dev system to the QA system.
How can I transport the condition from the dev to QAZack,
Did it create a transport request when you initially created the condition?
If it did and if the transport was loaded onto QA and you cannot see the new condition in QA then there seems to be a problem in the system. Try creating a new dummy condition and see if that gets transported. If not then, you have open a message to sap.
Ani -
Start Condition for CRM Actions
Hi,
we have a requirement to create the follow up document (complaint) in CRM for the Return orders created in ECC system and not for the return orders created in CRM system. We have configured an action for the same and the follow up document is getting created for the Return orders from ECC and CRM also. There is parameter called LOGICAL_SYSTEM in header, using this we can identify the document source system. How can we make use of this LOGICAL_SYSTEM parameter in start condition as this not part of the standard container?
Any helpful answers will be highly appreciated.
Thanks,
RajinikanthHello,
Everything is explained in the following OSS notes:
Note 502389 - Actions: Using additional attributes for conditions
Note 896175 - FAQ: Customizing
Regards,
Nicolas. -
Custom button with action listener - will not invoke action listener
Hi
For whatever reason, I cannot find a concise example of a simple custom component that can invoke an action listener. The tutorials I've read so far either ignore this fundamental topic or only make the slightest make reference to it.
The best I have come up with - in terms of a simple prototype is below... but, the action listener is never invoked.... Can someone tell me what I am missing (full code below). Hopefully, what is missing or incorrect will be obvious to you JSF experts out there.
Thanks for any help!!
-f
tld
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>0.01</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>jsfcustomcomponent</short-name>
<uri>http://jsfcustomcomponent/</uri>
<description><![CDATA[jsf custom component tags]]> </description>
<tag>
<name>specialBtnTag</name>
<tag-class>jsfcustomcomponent.SpecialBtnTag</tag-class>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description><![CDATA[button value]]></description>
</attribute>
<attribute>
<name>actionListener</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description><![CDATA[action listener]]> </description>
</attribute>
</tag>
</taglib>
SpecialBtnComponent
package jsfcustomcomponent;
import javax.faces.component.*;
import javax.faces.context.*;
import javax.faces.el.*;
import javax.faces.event.*;
public class SpecialBtnComponent
extends UIComponentBase implements ActionSource
public static final String COMPONENT_TYPE = "SpecialBtnComponent";
public static final String RENDERER_TYPE = "SpecialBtnRenderer";
public String getFamily()
return COMPONENT_TYPE;
public SpecialBtnComponent()
super();
setRendererType(SpecialBtnComponent.RENDERER_TYPE);
private String value;
public void setValue(String value, FacesContext facesContext)
this.value = value;
public String getValue()
if (null != value)
return value;
ValueBinding _vb = getValueBinding("value");
if (_vb != null)
return (String) _vb.getValue(getFacesContext());
else
return null;
private MethodBinding action = null;
public MethodBinding getAction()
return action;
public void setAction(MethodBinding methodBinding)
this.action = action;
private MethodBinding actionListener = null;
public MethodBinding getActionListener()
return (this.actionListener);
public void setActionListener(MethodBinding methodBinding)
this.actionListener = actionListener;
public boolean isImmediate()
return false;
public void setImmediate(boolean _boolean)
//this.immediate = immediate;
public void addActionListener(ActionListener actionListener)
addFacesListener(actionListener);
public ActionListener[] getActionListeners()
return (ActionListener[]) getFacesListeners(ActionListener.class);
public void removeActionListener(ActionListener actionListener)
removeFacesListener(actionListener);
public Object saveState(FacesContext context)
Object values[] = new Object[5];
values[0] = super.saveState(context);
values[1] = value;
values[2] = saveAttachedState(context, action);
values[3] = saveAttachedState(context, actionListener);
return ( (Object) (values));
public void restoreState(FacesContext context, Object state)
Object values[] = (Object[]) state;
super.restoreState(context, values[0]);
value = (String) values[1];
action = (MethodBinding) restoreAttachedState(context, values[2]);
actionListener = (MethodBinding) restoreAttachedState(context, values[3]);
public void broadcast(FacesEvent event) throws AbortProcessingException
super.broadcast(event);
if (event instanceof ActionEvent)
FacesContext context = getFacesContext();
MethodBinding mb = getActionListener();
if (mb != null)
mb.invoke(context, new Object[]
{event});
ActionListener listener = context.getApplication().getActionListener();
if (listener != null)
listener.processAction( (ActionEvent) event);
public void queueEvent(FacesEvent e)
if (e instanceof ActionEvent)
if (isImmediate())
e.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
else
e.setPhaseId(PhaseId.INVOKE_APPLICATION);
super.queueEvent(e);
SpecialBtnRenderer
package jsfcustomcomponent;
import java.util.*;
import javax.faces.component.*;
import javax.faces.context.*;
import javax.faces.event.*;
import javax.faces.render.*;
public class SpecialBtnRenderer
extends Renderer
String value;
public SpecialBtnRenderer()
public void decode(FacesContext context, UIComponent component)
Map requestMap = context.getExternalContext().getRequestParameterMap();
String clientId = component.getClientId(context);
SpecialBtnComponent specialBtnComponent = (SpecialBtnComponent) component;
String value = (String) requestMap.get(clientId);
if (null != value)
specialBtnComponent.setValue(value, context);
ActionEvent actionEvent = new ActionEvent(specialBtnComponent);
specialBtnComponent.queueEvent(actionEvent);
public void encodeEnd(FacesContext context, UIComponent component) throws java.io.IOException
SpecialBtnComponent specialBtnComponent = (SpecialBtnComponent) component;
ResponseWriter writer = context.getResponseWriter();
String clientId = component.getClientId(context);
value = (String) component.getAttributes().get("value");
if (value == null)
value = "defaultValue";
buildSpecialBtn(writer, value, clientId, specialBtnComponent);
private void buildSpecialBtn(ResponseWriter writer, String value, String clientId, SpecialBtnComponent component) throws java.io.IOException
writer.startElement("table", component);
writer.startElement("tbody", component);
writer.startElement("tr", component);
writer.startElement("td", component);
value = String.valueOf(value);
writer.startElement("input", component);
writer.writeAttribute("type", "submit", null);
writer.writeAttribute("name", clientId, "clientId");
writer.writeAttribute("value", value, null);
writer.endElement("input");
writer.endElement("td");
writer.endElement("tr");
writer.endElement("tbody");
writer.endElement("table");
SpecialBtnTag
package jsfcustomcomponent;
import javax.faces.component.*;
import javax.faces.el.*;
import javax.faces.webapp.*;
import com.sun.faces.util.*;
public class SpecialBtnTag
extends UIComponentTag
public String value = null;
public String actionListener = null;
public String getComponentType()
return SpecialBtnComponent.COMPONENT_TYPE;
public String getRendererType()
return SpecialBtnComponent.RENDERER_TYPE;
protected void setProperties(UIComponent component)
super.setProperties(component);
if (! (component instanceof SpecialBtnComponent))
throw new IllegalStateException("Component " + component.toString() +
" not expected type. Expected: jsfcustomcomponent.SpecialBtnComponent. Perhaps you�re missing a tag?");
SpecialBtnComponent specialBtnComponent = (SpecialBtnComponent) component;
if (value != null)
if (isValueReference(value))
ValueBinding vb = Util.getValueBinding(value);
specialBtnComponent.setValueBinding("value", vb);
else
throw new IllegalStateException("The value for �value� must be a ValueBinding.");
if (actionListener != null)
if (isValueReference(actionListener))
ValueBinding vb = Util.getValueBinding(actionListener);
specialBtnComponent.setValueBinding("actionListener", vb);
else
throw new IllegalStateException("The value for �actionListener� must be a ValueBinding.");
public void release()
super.release();
value = null;
actionListener = null;
public void setValue(String value)
this.value = value;
public String getValue()
return this.value;
public void setActionListener(String actionListener)
this.actionListener = actionListener;
public String getActionListener()
return this.actionListener;
jsp1.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://jsfcustomcomponent/" prefix="j"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<link rel="stylesheet" type="text/css" href="./stylesheet.css" title="Style">
</head>
<body>
<f:view>
<h:form id="form01">
<h:outputText value="test special button with action listener"/>
<j:specialBtnTag value="#{specialBtnBacking.specialBtnValue}" actionListener="#{specialBtnBacking.specialBtnActionListener}"/>
<h:messages/>
<h:outputText value="#{specialBtnBacking.outcome}"/>
</h:form>
</f:view>
</body>
</html>
SpecialBtnBacking
package specialbtn;
import javax.faces.context.*;
import javax.faces.event.*;
public class SpecialBtnBacking
private FacesContext context;
public SpecialBtnBacking()
this.setSpecialBtnValue("Special Button with action listener");
private String specialBtnValue;
public String getSpecialBtnValue()
return this.specialBtnValue;
public void setSpecialBtnValue(String specialBtnValue)
this.specialBtnValue = specialBtnValue;
private String outcome="actionlistener NOT invoked: click specialBtn above to test";
public String getOutcome()
return outcome;
public void setOutcome(String outcome)
this.outcome = outcome;
public void specialBtnActionListener(ActionEvent evt)
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Jsp1Backing/specialBtnActionListener()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
this.outcome="***action listener invoked!!!***";
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>specialBtnBacking</managed-bean-name>
<managed-bean-class>specialbtn.SpecialBtnBacking</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<component>
<component-type>SpecialBtnComponent</component-type>
<component-class>jsfcustomcomponent.SpecialBtnComponent</component-class>
<component-extension>
<renderer-type>SpecialBtnRenderer</renderer-type>
</component-extension>
</component>
<render-kit>
<renderer>
<component-family>SpecialBtnComponent</component-family>
<renderer-type>SpecialBtnRenderer</renderer-type>
<renderer-class>jsfcustomcomponent.SpecialBtnRenderer</renderer-class>
</renderer>
</render-kit>
</faces-config>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>pagerWEB</display-name>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<jsp-config>
<taglib>
<taglib-uri>http://jsfcustomcomponent/</taglib-uri>
<taglib-location>/WEB-INF/jsfcustomcomponent.tld</taglib-location>
</taglib>
</jsp-config>
<servlet>
<description>Added by JBuilder to compile JSPs with debug info</description>
<servlet-name>debugjsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>classdebuginfo</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>debugjsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
</web-app>got it working....
The changes were:
in "SpecialBtnRenderer"...
--new--
mb.invoke(context, new Object[1]);
--old--
mb.invoke(context, new Object[0]);
in "SpecialBtnTag"...
--new--
import javax.faces.event.ActionEvent;
--new--
MethodBinding mb = FacesContext.getCurrentInstance().getApplication().createMethodBinding(specialBtnListener, new Class[]{ActionEvent.class});
--old--
MethodBinding mb = FacesContext.getCurrentInstance().getApplication().createMethodBinding(specialBtnListener, null);
-Below is the entire application, again -- for those (like myself) who need concrete examples...
I hope this helps someone else! --f
jsp1.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://jsfcustomcomponent/" prefix="j"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<link rel="stylesheet" type="text/css" href="./stylesheet.css" title="Style">
</head>
<body>
<f:view>
<h:messages/>
<h:form id="form01">
<h:outputText value="test special button with action listener"/>
<j:specialBtnTag value="#{specialBtnBacking.specialBtnValue}" specialBtnListener="#{specialBtnBacking.specialBtnActionListener}"/>
<h:outputText value="#{specialBtnBacking.outcome}"/>
</h:form>
</f:view>
</body>
</html>
SpecialBtnBacking
package specialbtn;
import javax.faces.context.*;
import javax.faces.event.*;
public class SpecialBtnBacking
private FacesContext context;
public SpecialBtnBacking()
this.setSpecialBtnValue("Special Button with action listener");
private String specialBtnValue;
public String getSpecialBtnValue()
return this.specialBtnValue;
public void setSpecialBtnValue(String specialBtnValue)
this.specialBtnValue = specialBtnValue;
private String outcome = "actionlistener NOT invoked: click specialBtn above to test";
public String getOutcome()
return outcome;
public void setOutcome(String outcome)
this.outcome = outcome;
public void specialBtnActionListener(ActionEvent evt)
System.out.println("\n\n");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Jsp1Backing/specialBtnActionListener()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Jsp1Backing/specialBtnActionListener()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Jsp1Backing/specialBtnActionListener()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Jsp1Backing/specialBtnActionListener()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Jsp1Backing/specialBtnActionListener()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
this.outcome = "***action listener invoked!!!***";
jsfcustomcomponent.tld
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>0.01</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>jsfcustomcomponent</short-name>
<uri>http://jsfcustomcomponent/</uri>
<description><![CDATA[jsf custom component tags]]> </description>
<tag>
<name>specialBtnTag</name>
<tag-class>jsfcustomcomponent.SpecialBtnTag</tag-class>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description><![CDATA[button value]]></description>
</attribute>
<attribute>
<name>specialBtnListener</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description><![CDATA[action listener]]> </description>
</attribute>
</tag>
</taglib>
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>specialBtnBacking</managed-bean-name>
<managed-bean-class>specialbtn.SpecialBtnBacking</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<component>
<component-type>SpecialBtnComponent</component-type>
<component-class>jsfcustomcomponent.SpecialBtnComponent</component-class>
<component-extension>
<renderer-type>SpecialBtnRenderer</renderer-type>
</component-extension>
</component>
<render-kit>
<renderer>
<component-family>SpecialBtnComponent</component-family>
<renderer-type>SpecialBtnRenderer</renderer-type>
<renderer-class>jsfcustomcomponent.SpecialBtnRenderer</renderer-class>
</renderer>
</render-kit>
</faces-config>
SpecialBtnComponent.java
package jsfcustomcomponent;
import javax.faces.component.*;
import javax.faces.context.*;
import javax.faces.el.*;
import javax.faces.event.*;
public class SpecialBtnComponent
extends UIComponentBase implements ActionSource
public static final String COMPONENT_TYPE = "SpecialBtnComponent";
public static final String RENDERER_TYPE = "SpecialBtnRenderer";
public String getFamily()
return COMPONENT_TYPE;
public SpecialBtnComponent()
super();
setRendererType(SpecialBtnComponent.RENDERER_TYPE);
private String value;
public void setValue(String value, FacesContext facesContext)
this.value = value;
public String getValue()
if (null != this.value)
return this.value;
ValueBinding _vb = getValueBinding("value");
if (_vb != null)
return (String) _vb.getValue(getFacesContext());
else
return null;
private MethodBinding specialBtnListener = null;
public MethodBinding getActionListener()
return (this.specialBtnListener);
public void setActionListener(MethodBinding actionListener)
this.specialBtnListener = actionListener;
public Object saveState(FacesContext context)
Object values[] = new Object[3];
values[0] = super.saveState(context);
values[1] = saveAttachedState(context, this.specialBtnListener);
values[2] = this.value;
return (values);
public void restoreState(FacesContext context, Object state)
Object values[] = (Object[]) state;
super.restoreState(context, values[0]);
this.specialBtnListener = (MethodBinding) restoreAttachedState(context, values[1]);
this.value = (String) restoreAttachedState(context, values[2]);
public void broadcast(FacesEvent event) throws AbortProcessingException
super.broadcast(event);
if (event instanceof ActionEvent)
FacesContext context = getFacesContext();
MethodBinding mb = this.getActionListener();
if (mb != null)
try
mb.invoke(context, new Object[]
{event});
catch (EvaluationException ex)
System.out.println("SpecialBtnComponent/broadcast(FacesEvent event)...EvaluationException encountered - ex.getMessage()=" + ex.getMessage());
ex.printStackTrace();
ActionListener actionListener = context.getApplication().getActionListener();
if (actionListener != null)
actionListener.processAction( (ActionEvent) event);
public void queueEvent(FacesEvent e)
if (e instanceof ActionEvent)
e.setPhaseId(PhaseId.INVOKE_APPLICATION);
super.queueEvent(e);
public MethodBinding getAction()
return null;
public void setAction(MethodBinding methodBinding)
public boolean isImmediate()
return false;
public void setImmediate(boolean _boolean)
public void addActionListener(ActionListener actionListener)
addFacesListener(actionListener);
public ActionListener[] getActionListeners()
return (ActionListener[]) getFacesListeners(ActionListener.class);
public void removeActionListener(ActionListener actionListener)
removeFacesListener(actionListener);
SpecialBtnTag.java
package jsfcustomcomponent;
import javax.faces.component.*;
import javax.faces.el.*;
import javax.faces.webapp.*;
import com.sun.faces.util.*;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
public class SpecialBtnTag
extends UIComponentTag
public String value = null;
public String specialBtnListener = null;
private SpecialBtnComponent specialBtnComponent;
public SpecialBtnTag()
super();
public String getComponentType()
return SpecialBtnComponent.COMPONENT_TYPE;
public String getRendererType()
return SpecialBtnComponent.RENDERER_TYPE;
protected void setProperties(UIComponent component)
super.setProperties(component);
if (! (component instanceof SpecialBtnComponent))
throw new IllegalStateException("Component " + component.toString() +
" not expected type. Expected: jsfcustomcomponent.SpecialBtnComponent. Perhaps you�re missing a tag?");
specialBtnComponent = (SpecialBtnComponent) component;
if (value != null)
if (isValueReference(value))
ValueBinding vb = Util.getValueBinding(value);
specialBtnComponent.setValueBinding("value", vb);
else
throw new IllegalStateException("The value for �value� must be a ValueBinding.");
if (specialBtnListener != null)
if (isValueReference(specialBtnListener))
MethodBinding mb = FacesContext.getCurrentInstance().getApplication().createMethodBinding(specialBtnListener, new Class[]{ActionEvent.class});
( (SpecialBtnComponent) component).setActionListener(mb);
else
MethodBinding mb = Util.createConstantMethodBinding(specialBtnListener);
( (SpecialBtnComponent) component).setActionListener(mb);
public void release()
super.release();
value = null;
specialBtnListener = null;
public void setValue(String value)
this.value = value;
public String getValue()
return this.value;
public void setSpecialBtnListener(String specialBtnListener)
this.specialBtnListener = specialBtnListener;
public String getSpecialBtnListener()
return this.specialBtnListener;
SpecialBtnRenderer
package jsfcustomcomponent;
import java.util.*;
import javax.faces.component.*;
import javax.faces.context.*;
import javax.faces.event.*;
import javax.faces.render.*;
import javax.faces.el.MethodBinding;
import javax.faces.el.*;
public class SpecialBtnRenderer
extends Renderer
String value;
public SpecialBtnRenderer()
super();
public void decode(FacesContext context, UIComponent component)
try
Map requestMap = context.getExternalContext().getRequestParameterMap();
String clientId = component.getClientId(context);
SpecialBtnComponent specialBtnComponent = (SpecialBtnComponent) component;
String value = (String) requestMap.get(clientId);
if (null != value)
specialBtnComponent.setValue(value, context);
MethodBinding mb = specialBtnComponent.getActionListener();
if (mb != null)
System.out.println("SpecialBtnRenderer/decode...mb.getExpressionString()=" + mb.getExpressionString());
//mb.invoke(context, new Object[0]);
mb.invoke(context, new Object[1]);
ActionEvent actionEvent = new ActionEvent(specialBtnComponent);
specialBtnComponent.queueEvent(actionEvent);
catch (EvaluationException ex)
ex.printStackTrace();
public void encodeEnd(FacesContext context, UIComponent component) throws java.io.IOException
SpecialBtnComponent specialBtnComponent = (SpecialBtnComponent) component;
ResponseWriter writer = context.getResponseWriter();
String clientId = component.getClientId(context);
value = (String) component.getAttributes().get("value");
if (value == null)
value = "defaultValue";
buildSpecialBtn(writer, value, clientId, specialBtnComponent);
private void buildSpecialBtn(ResponseWriter writer, String value, String clientId, SpecialBtnComponent component) throws java.io.IOException
writer.startElement("table", component);
writer.startElement("tbody", component);
writer.startElement("tr", component);
writer.startElement("td", component);
value = String.valueOf(value);
writer.startElement("input", component);
writer.writeAttribute("type", "submit", null);
writer.writeAttribute("name", clientId, "clientId");
writer.writeAttribute("value", value, null);
writer.endElement("input");
writer.endElement("td");
writer.endElement("tr");
writer.endElement("tbody");
writer.endElement("table");
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>pagerWEB</display-name>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<jsp-config>
<taglib>
<taglib-uri>http://jsfcustomcomponent/</taglib-uri>
<taglib-location>/WEB-INF/jsfcustomcomponent.tld</taglib-location>
</taglib>
</jsp-config>
</web-app> -
Conditional on dynamic action result?
I have a form that has a dynaminc action on it that sets the value for an item P2_Date. The value is queried from another table. In most cases, the query will return a date for the item and it works out well. This item is triggered upon picking a DA_Number. Once the DA_Number is selected from the form, the dynamic action is summoned, the query does its querying and populates the date field with a date (P2_Date). However, there are some cases that the query will return a NULL value (there is no date associated with the selected DA Number). On the form, the request field looks blank, like there's nothing there. So once I hit submit, the date is left blank on my report
Is it possible to place a conditional on that value that is queried (P2_Date)? Once I select a a DA Number, if it returns a NULL/blank for the P2_Date field, I want the user to be able to select the value/date and capture that date to be submitted. I already have the date field set as a "DatePicker", but when I enter in a date, it is not being captured
Is there anyway to capture this? Thanks in advance.Hi again,
Thanks for helping out!
this is how it is now, and it is working a bit to well;).
Now the rule applys for all company codes so the check on company code is not working.
As long as the action is SD they get the 2PEN subtype in IT2010.
Any suggestions to what is wrong now?
Thanks
0001 04 403 P *UPDATE IT2010 WHEN ACTION SD
0001 04 405 P PSPAR-MASSN='SD'
0001 04 407 P P0001-BUKRS='1200'/X
0001 04 410 P P0001-BUKRS='1035'/X
0001 04 411 P P0001-BUKRS='1147'/X
0001 04 412 P P0001-BUKRS='1001'/X
0001 04 413 I INS,2010,2PEN,,(P0000-BEGDA)/D
0001 04 414 W P2010-BETRG='1' -
Refreshing application on button action
hi experts ,
i have created an application and on action of a button i want to get it refreshed , means it should work like home. Pls guide me in this regard.
Thanks in advance.Hi Vishavdeep
Well we have few webdynpro applications with multiple views, by design, on the last step after save, we disable all other button and display a new button called 'RESTART' with only available choice. On click of this button
1. We initialize all the data of component.
2. Clear stored variable parameters & internal table used by assistance class
3. if everything was fine fire navigation to the FirstDefaultView of the webdynpro application.
Thus its almost restart of the application.
So design wise have a method INIT_COMP in the component controller of webdynpro component. and then at the last step when call to RESTART is made reinitialize all the data of your webdynpro component.
method onactionrestart.
wd_assist->reinit_my_obj_tables( ).
wd_this->fire_to_v_Start_plg( ).
endmethod
Greetings
Prashant
Maybe you are looking for
-
Cash discount in taxinn before cst
Dear Gurus, My client wants cash discount in taxinn. scenario is as follows cash discount in betwen Cst and Excise duties as follows Basic =100 Excise such as BED and Hsess =8.24 Total +Exc.Duties
-
How do i get rid of a firewall Alert jamming Safari?
how do i get rid of a firewall Alert jamming Safari?
-
I have iPhoto, iOS, etc. all up to date.... however my iPad, iPhone, and Mac PhotoStreams all contain different pictures and aren't the same. Any ideas why? I'd rather not reset the whole thing if I don't have too.
-
Hi, I have a project which is in created status.We are getting the Budget distribution from Investment Prgm as we are linking measure to project. T code IM52. I want to have a control without Budget Distribution to the project, Nobody is allowed to r
-
when we were Deploying Package using MSI we got the following error Failed to deploy map Error saving map. Stored procedure returned non-zero result. Check if source and target schemas are present. Error saving map. Stored procedure returned non-zero