Coding Practice for Bound Property Names
I think this simply an issue over coding practices, but if I am right then all the tutorials and documentation on how to write Beans are promoting poor coding practices. Speicifcally, it bugs me that String literals are always used in all the code I see. As in the following code:
class MyBean {
public void setValue(value newValue) {
beansupport.firePropertyChange("value", oldValue, value);
}the practice that I have starting using is:
class MyBean {
public static final String propertyValue = "value";
public void setValue(value newValue) {
beansupport.firePropertyChange(propertyValue, oldValue, value);
}This way, a PropertyChangeListener can refererence MyBean.propertyValue instead of using the literal "value" -- eliminating the chance for error and also there don't have to be multiple literals floating around using up space. Is there any reason this isn't commonly accepted practice or did I miss something?
Strings appearing in source code can be reduced to a constant, like an enum. So it is likely that the code with strings is actually faster, as the value is known before compilation. It is easier to read. Keep in mind that strings get interned every now and then and thus get reduced to this equivalency:
public method blah( "value", some stuff )...
public method nah(*){ do stuff; let x = "value"; more stuff with "zoiks!" }
ends up like
key k1 = "value"
key k2 = "zoiks!"
what the jvm sees;
public method blah( key1, some stuff )...
public method nah(*){ do stuff; let x = key1; more stuff with key2 }
The string values get "inlined" and can be checked during compilation, allowing for many optimisations not otherwise possible.
Hope that helps a little.
Andrew
Similar Messages
-
Forms Personalization -document for different 'Property Name' on Action tab
Hi,
I am trying to find document which contains meaning of different 'Property Name' in Action tab, while in form personalization screen. I had searched for document but no luck.
Please let me know the link for such document.
Thanks,
AtulHi Sandeep,
I am looking for default value only but INITIAL_VALUE does not work in EBS. Here property name VALUE is working for default value. Hence, the confusion for usage of INITIAL_VALUE in EBS.
Although I know INITIAL_VALUE works on Oracle Forms but same does not apply in EBS forms personalization.
Regards,
Atul -
Why the "Basic" crawled properties appear more than once for each property name?
When i map a managed property and want to select for example "Basic:9" - i see 2 lines of "Basic:9".
why is that so? are there more than one "Basic:9" property?
keren tsurHi keren,
The properties have different types, Basic:9 which has mapped to Path is Text type, the other one is Yes/No type. You could refer to:
http://technet.microsoft.com/en-in/library/hh134087(v=office.14).aspx
If you would like to know about Crawled property data types, please refer to:
http://blogs.technet.com/b/speschka/archive/2010/08/21/finding-which-crawled-property-data-types-match-a-managed-property-data-type-in-sharepoint-2010.aspx
Regards,
Rebecca Tu
TechNet Community Support -
Good coding practice for object init
We have a code that requires initializing instance of the object for each item in the loop. I have following option in mind. Please advice which one is the best option. TIA
Option 1
=======
public class AThread extends Thread {
private ObjectA var1 = null;
private ObjectA var2 = null;
public AThread() {
this.var1 = new objectA();
public void run() {
while ( ... ) {
if (var2 != null) {
var2 = null;
var2 = var1;
var2.callmethod();
Option 1
=======
public class AThread extends Thread {
private ObjectA var1 = null;
public AThread() {
public void run() {
while ( ... ) {
var1 = new objectA();
var1.callmethod();
var1 = null;
}1. If in the future, you post code, you can make it much more readable by enclosing it in the [code][/code] tags.
2. Why not implement Runnable instead of extend Thread? You're not creating a new type of thread, so it is more "OO"-sensible to create a new Runnable and run it.
3. In the first Option 1, you might as well just be doing
while (...) {
var1.callMethod();
}Assigning the reference to another variable does not create a new instance of the object, so it is not worthwhile to create a new reference to it just to call its methods.
4. In option 2, setting the object's reference to null at the end doesn't really help anything, because the object is going out of scope anyway and will be destroyed.
Your question, really, between the two options, is as follows: should you recreate and destroy the object for every iteration through the loop, or just call the method multiple times? -
"Message Illegal character used in property name" C4043 what is illegal?
hi *,
does anyone know what are legal chacters for JMS properties for SJSMQ?
according to http://docs.sun.com/app/docs/doc/819-4469/aeqgo?a=view
which mentions:
C4043
Message Illegal character used in property name - {0}
{0} is replaced with the illegal character used.
Cause An attempt was made to use a property name containing an illegal character. See JMS Message API Javadoc for valid property names.we are sometimes hitting this problem.
e.g. '1' is not valid or strings with '-' but what else what else?
i am migrating a huge application from STCMS (which allowed such property names) to SJSMQ and i would like to know exactly what is legal and not legal. does anyone know?
regards chrisAlso ... look @ the description for what is a valid property in the JMS javadocs for Message:
http://java.sun.com/javaee/5/docs/api/
The key section is the fact that it must confirm to a selector identifier (covered later in the page). Here is part of an except that may help
An identifier is an unlimited-length sequence of letters and digits, the first of which must be a letter. A letter is any character for which the method Character.isJavaLetter returns true. This includes '_' and '$'. A letter or digit is any character for which the method Character.isJavaLetterOrDigit returns true. the JMS specification ... -
Hi
are there any best coding practices for EP development?can anybody suggest the material?
PrasadEP, as in Enterprise Portal?
James -
Best practice for property file
I am trying one small code which uses values from property file.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException
InputStream inputStream = servletContext.getResourceAsStream(/WEB-INF/test.properties);
PrintWriter out = response.getWriter();
Properties prop = new Properties();
prop.load(inputStream);
inputStream.close();
String nameprop = prop.getProperty("name");
out.println(nameprop);
}I am getting the value from property file, It's perfectly ok as far as test code is concerned. Above will open the inputStream for each thread, which is not needed so i modified it and put in inside init() method. That is also working, i believe this will give me some better performance.
But can i extend it further? I load property file at application level and all my servlets make use of it?
What is normal practice to read property file to get good performance? I serached forum, i found some info there but could not figure out exactly how people are doing it.
Thanks in advance,
regards
ManishaThanks to all posters,
As mentioned by duffymo, I tried some code which i tested on my m/c and working fine. But just want to confirm, what i understood and wrote is correct.
I wrote 1st servlet to get the property file and store into servlet context, 2nd servlet is just to test it.
1st Servlet:
package common;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class TestPropertyfiles_1 extends HttpServlet
public void init(ServletConfig config) throws ServletException
super.init(config);
try{
String PF_PATH = "/WEB-INF/test.properties";
Properties prop = new Properties();
InputStream inputStream = config.getServletContext().getResourceAsStream(PF_PATH);
prop.load(inputStream);
inputStream.close();
getServletContext().setAttribute("pf", prop);
}catch(Exception e){}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException
PrintWriter out = response.getWriter();
Properties tmpprop = (Properties) getServletContext().getAttribute("pf");
String nameprop = tmpprop.getProperty("name");
out.println("name from property file" + nameprop);
}2nd servlet:
package common;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class TestPropertyfiles_2 extends HttpServlet
public void init(ServletConfig config) throws ServletException
super.init(config);
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException
PrintWriter out = response.getWriter();
Properties tmpprop = (Properties) getServletContext().getAttribute("pf");
String nameprop = tmpprop.getProperty("name");
out.println("name from property file - no 2" + nameprop);
}This was initially giving problem if I access 2nd servlet first before accessing 1st servlet. I did some changes inside web.xml
<servlet>
<servlet-name>common.TestPropertyfiles_1</servlet-name>
<servlet-class>common.TestPropertyfiles_1</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
And then all was ok.
One thing came to my mind. I can have one common servlet just for all initialisation, this will not have any doGet/doPost.
regards
Manisha -
Best practice for customizing EJB property after deployment
Hi Gurus,
What is the best practice for customizing EJB property after deployment in NW7.1? I have a stateless session bean and it needs to get some environment information before acting. While the information can only be known at runtime. What should I do to achieve it? I thought I can bind the property with a JNDI context but I did not find out where to declare and change the context value. Please advise. Thanks.
B.R.Hi.
I have a similar problem. But I still can not edit the properties of the ejb-jar.xml.
I tried to stop the web service, but the properties still remain unmodifiable.
Could you advise me how to change them?
We have installed SAP Server 7.0.2 -
Revision: 4286
Author: [email protected]
Date: 2008-12-10 18:29:26 -0800 (Wed, 10 Dec 2008)
Log Message:
Bug: BLZ-282: added property name to debug info for Map serialization
checkintests: pass
Ticket Links:
http://bugs.adobe.com/jira/browse/BLZ-282
Modified Paths:
blazeds/trunk/modules/core/src/flex/messaging/io/amf/Amf3Input.javaGuo,
I see a question mark in the sql statement, instead of the Oracle-style bind parameter notation which would be ":1". Can you change your VO to use Oracle-Style bind params and see whether it works?
Steven Davelaar,
JHeadstart Team. -
A list of property names for PropertyChangeListener
Hello all,
Can anyone post a link to a list of property names? I want to use the addPropertyChangeListener(String, PropertyChangeListener) method, but I can't until I find the name for the property I desire! (The one I'm after is the background colour for a JPanel, on the offchance someone knows it.)
Thanks,
Muel.I don't know what you're after, maybe if this helps you.
NOTE: This is not my source! Somebody posted it a while ago.import javax.swing.*;
import java.util.*;
public class ShowUIDefaults {
public static void main(String[] args) {
javax.swing.UIDefaults defaults = UIManager.getDefaults();
String[] colName = { "Key", "Value" };
String[][] rowData = new String[defaults.size()][2];
int i = 0;
System.out.println("Count Item = " + defaults.size());
// Constructing a TreeMap directly from defaults (which
// does supposedly implement Map) was resulting in an empty map.
java.util.TreeMap map = new TreeMap(defaults);
for (Enumeration enum = defaults.keys(); enum.hasMoreElements();) {
String key = (String) enum.nextElement();
map.put(key, defaults.get(key));
// I use a TreeMap so the keys in the table will be alphabetically sorted.
for (java.util.Iterator iter = map.keySet().iterator(); iter.hasNext(); i++) {
String keyStr = (String) iter.next();
rowData[0] = keyStr;
rowData[i][1] = "" + map.get(keyStr);
JFrame f = new JFrame("UIDefaults Key-Value sheet");
JTable t = new JTable(rowData, colName);
f.setContentPane(new JScrollPane(t));
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.pack();
f.setVisible(true); -
Adobe Form: Dynamic vlaue for Include text name. Script Coding
Hi,
Situtation:
Need to print an 'Include Text' in the Adobe form.
The key texname for the include name is dynamic - invoice number + position number.
I have created a Global Data variable item_textkey and assigned it to the inculde textname in 'Context'.
The Problem is I dont know how or where to assign a value to this global data variable at runtime, so the right include text is pulled up.
I tried the code in the "FormCalc' of the text field. But it doesnt work.
$record.ITEM_TEXTKEY = Concat ($record.IS_VBDKR.VBELN, $record.IS_VBDPR.POSNR)Try the following in initialize event of the main subform
$record.ITEM_TEXTKEY.rawValue = Concat ($record.IS_VBDKR.VBELN.rawValue, $record.IS_VBDPR.POSNR.rawValue)
Chintan -
Best practices for setting up projects
We recently adopted using Captivate for our WBT modules.
As a former Flash and Director user, I can say it’s
fast and does some great things. Doesn’t play so nice with
others on different occasions, but I’m learning. This forum
has been a great source for search and read on specific topics.
I’m trying to understand best practices for using this
product. We’ve had some problems with file size and
incorporating audio and video into our projects. Fortunately, the
forum has helped a lot with that. What I haven’t found a lot
of information on is good or better ways to set up individual
files, use multiple files and publish projects. We’ve decided
to go the route of putting standalones on our Intranet. My gut says
yuck, but for our situation I have yet to find a better way.
My question for discussion, then is: what are some best
practices for setting up individual files, using multiple files and
publishing projects? Any references or input on this would be
appreciated.Hi,
Here are some of my suggestions:
1) Set up a style guide for all your standard slides. Eg.
Title slide, Index slide, chapter slide, end slide, screen capture,
non-screen capture, quizzes etc. This makes life a lot easier.
2) Create your own buttons and captions. The standard ones
are pretty ordinary, and it's hard to get a slick looking style
happening with the standard captions. They are pretty easy to
create (search for add print button to learn how to create
buttons). There should instructions on how to customise captions
somewhere on this forum. Customising means that you can also use
words, symbols, colours unique to your organisation.
3) Google elearning providers. Most use captivate and will
allow you to open samples or temporarily view selected modules.
This will give you great insight on what not to do and some good
ideas on what works well.
4) Timings: Using the above research, I got others to
complete the sample modules to get a feel for timings. The results
were clear, 10 mins good, 15 mins okay, 20 mins kind of okay, 30
mins bad, bad, bad. It's truly better to have a learner complete
2-3 short modules in 30 mins than one big monster. The other
benefit is that shorter files equal smaller size.
5) Narration: It's best to narrate each slide individually
(particularly for screen capture slides). You are more likely to
get it right on the first take, it's easier to edit and you don't
have to re-record the whole thing if you need to update it in
future. To get a slicker effect, use at least two voices: one male,
one female and use slightly different accents.
6) Screen capture slides: If you are recording filling out
long window based databse pages where the compulsory fields are
marked (eg. with a red asterisk) - you don't need to show how to
fill out every field. It's much easier for the learner (and you) to
show how to fill out the first few fields, then fade the screen
capture out, fade the end of the form in with the instructions on
what to do next. This will reduce your file size. In one of my
forms, this meant the removal of about 18 slides!
7) Auto captions: they are verbose (eg. 'Click on Print
Button' instead of 'Click Print'; 'Select the Print Preview item'
instead of 'Select Print Preview'). You have to edit them.
8) PC training syntax: Buttons and hyperlinks should normally
be 'click'; selections from drop down boxes or file lists are
normally 'select': Captivate sometimes mixes them up. Instructions
should always be written in the correct order: eg. Good: Click
'File', Select 'Print Preview'; Bad: Select 'Print Preview' from
the 'File Menu'. Button names, hyperlinks, selections are normally
written in bold
9) Instruction syntax: should always be written in an active
voice: eg. 'Click Options to open the printer menu' instead of
'When the Options button is clicked on, the printer menu will open'
10) Break all modules into chapters. Frame each chapter with
a chapter slide. It's also a good idea to show the Index page
before each chapter slide with a progress indicator (I use an
animated arrow to flash next to the name of the next chapter), I
use a start button rather a 'next' button for the start of each
chapter. You should always have a module overview with the purpose
of the course and a summary slide which states what was covered and
they have complete the module.
11) Put a transparent click button somewhere on each slide.
Set the properties of the click box to take the learner back to the
start of the current chapter by pressing F2. This allows them to
jump back to the start of their chapter at any time. You can also
do a similar thing on the index pages which jumps them to another
chapter.
12) Recording video capture: best to do it at normal speed
and be concious of where your mouse is. Minimise your clicks. Most
people (until they start working with captivate) are sloppy with
their mouse and you end up with lots of unnecessarily slides that
you have to delete out. The speed will default to how you recorded
it and this will reduce the amount of time you spend on changing
timings.
13) Captions: My rule of thumb is minimum of 4 seconds - and
longer depending on the amount of words. Eg. Click 'Print Preview'
is 4 seconds, a paragraph is longer. If you creating knowledge
based modules, make the timing long (eg. 2-3 minutes) and put in a
next button so that the learner can click when they are ready.
Also, narration means the slides will normally be slightly longer.
14) Be creative: Capitvate is desk bound. There are some
learners that just don't respond no matter how interactive
Captivate can be. Incorporate non-captivate and desk free
activities. Eg. As part of our OHS module, there is an activity
where the learner has to print off the floor plan, and then wander
around the floor marking on th emap key items such as: fire exits;
first aid kit, broom and mop cupboard, stationary cupboard, etc.
Good luck! -
Best practice for mouseless ADF applications
I am developing an ADF application where the users do not want to use the mouse.
So I would like to know if there are a best practice for this?
I am already using the accessKey functionality and subforms defaultCommand
But I have had problems setting focus to objects on a page like tables. I would like a button to return the focus to the table after it has made the command like delete.
I have implemented a solution where I have found inspiration several threads and other webpages (see below).
Is this solution okay?
Are there any problems with it?
I would also like to know if there are better pathways to go like
out of the box solutions,
http://www.oracle.com/technetwork/developer-tools/adf/learnmore/79-global-template-button-strategy-360139.pdf (are there an example implementation?), or
http://one-size-doesnt-fit-all.blogspot.dk/2010/11/adf-ui-shell-supporting-global-hotkeys.html
in advance thanks
Inspiration webpages
https://blogs.oracle.com/jdevotnharvest/entry/how_to_programmatically_set_focus
http://technology.amis.nl/2008/01/04/adf-11g-rich-faces-focus-on-field-after-button-press-or-ppr-including-javascript-in-ppr-response-and-clientlisteners-client-side-programming-in-adf-faces-rich-client-components-part-2/
how to Commit table by writting Java code in Managed Bean?
Table does not refresh and getting error as UIComponent is Null
A short description of the solution:
(jdeveloper version 11.1.1.2.0)
--- Example where I use onSetFocus in jsff page
<af:commandButton text="#{hrsusuiBundle.FOCUS}" id="cb10"
partialSubmit="true" accessKey="f"
shortDesc="Alt+Shift+F"
actionListener="#{managedBean_clientUtils.onSetFocus}">
<af:clientAttribute name="focusField" value="t1"/>
</af:commandButton>
--- Examples where I use doTableActionAndSetFocus in jsff page
--- There have to be a binding in the jsff page to delete, commit and rollback
<af:commandButton text="#{hrsusuiBundle.DELETE}" id="cb4"
accessKey="x"
shortDesc="Alt+Shift+X"
partialSubmit="true"
actionListener="#{managedBean_clientUtils.doTableActionAndSetFocus}">
<af:clientAttribute name="focusField" value="t1"/>
<af:clientAttribute name="actionField" value="Delete"/>
</af:commandButton>
<af:commandButton text="#{hrsusuiBundle.COMMIT}" id="cb5"
accessKey="s" shortDesc="Alt+Shift+S"
partialSubmit="true"
actionListener="#{managedBean_clientUtils.doTableActionAndSetFocus}">
<af:clientAttribute name="focusField" value="t1"/>
<af:clientAttribute name="actionField" value="Commit"/>
</af:commandButton>
<af:commandButton text="#{hrsusuiBundle.ROLLBACK}" id="cb6"
accessKey="z" shortDesc="Alt+Shift+Z"
partialSubmit="true"
actionListener="#{managedBean_clientUtils.doTableActionAndSetFocus}"
immediate="true">
<af:resetActionListener/>
<af:clientAttribute name="focusField" value="t1"/>
<af:clientAttribute name="actionField" value="Rollback"/>
</af:commandButton>
--- This is the java class I use
--- It is published in adfc-config.xml as a request scope managedbean
public class ClientUtils {
public ClientUtils() {
public void doTableActionAndSetFocus(ActionEvent event) {
RichCommandButton rcb = (RichCommandButton)event.getSource();
String focusOn = (String)rcb.getAttributes().get("focusField");
String actionToDo = (String)rcb.getAttributes().get("actionField");
UIComponent component = null;
String clientId = null;
component = JSFUtils.findComponentInRoot(focusOn);
clientId = component.getClientId(JSFUtils.getFacesContext());
if ( "Delete".equals(actionToDo) || "Commit".equals(actionToDo) || "Rollback".equals(actionToDo) ){
BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry();
OperationBinding operationBinding = bindings.getOperationBinding(actionToDo);
Object result = operationBinding.execute();
AdfFacesContext.getCurrentInstance().addPartialTarget(component);
if (clientId != null) {
makeSetFocusJavaScript(clientId);
public static String onSetFocus(ActionEvent event) {
RichCommandButton rcb = (RichCommandButton)event.getSource();
String focusOn = (String)rcb.getAttributes().get("focusField");
String clientId = null;
if (focusOn.contains(":")) {
clientId = focusOn;
} else {
clientId = findComponentsClientIdInRoot(focusOn);
if (clientId != null) {
makeSetFocusJavaScript(clientId);
return null;
private static void writeJavaScriptToClient(String script) {
FacesContext fctx = FacesContext.getCurrentInstance();
ExtendedRenderKitService erks = null;
erks = Service.getRenderKitService(fctx, ExtendedRenderKitService.class);
erks.addScript(fctx, script);
public static void makeSetFocusJavaScript(String clientId) {
if (clientId != null) {
StringBuilder script = new StringBuilder();
//use client id to ensure component is found if located in
//naming container
script.append("var textInput = ");
script.append("AdfPage.PAGE.findComponentByAbsoluteId");
script.append ("('"+clientId+"');");
script.append("if(textInput != null){");
script.append("textInput.focus();");
script.append("}");
writeJavaScriptToClient(script.toString());
public static String findComponentsClientIdInRoot(String id) {
UIComponent component = null;
String clientId = null;
component = JSFUtils.findComponentInRoot(id);
clientId = component.getClientId(JSFUtils.getFacesContext());
return clientId;
}Hi,
I am developing an ADF application where the users do not want to use the mouse. So I would like to know if there are a best practice for this?
Well HTML (and this is the user interface you see) follows a tab index navigation that you follow with "tab" and "shift+tab". Anything else is a short cut for which you use mnemonics (as you already do) or shortcuts (explained in http://one-size-doesnt-fit-all.blogspot.dk/2010/11/adf-ui-shell-supporting-global-hotkeys.html). There is a distinction to make between non-web environments (which I think you and your users have abackground in) and client desktop environments. Browsers block some keyboard functionality for their own purpose. So you may have to find a list of keys first that work across browsers. Unlike desktop clients, which allow you to "press a button" without the button to take focus, this cannot be done on the web. So you need to be clever here, avoiding buttons at all.
The following paper is about JavaScript in ADF and explains the basics for what Chris Muir explains in : http://one-size-doesnt-fit-all.blogspot.dk/2010/11/adf-ui-shell-supporting-global-hotkeys.html
http://www.oracle.com/technetwork/developer-tools/jdev/1-2011-javascript-302460.pdf
It has the outline for how to register short cut keys that perform a specific action (e.g. register ctrl+d to delete the current row you are on, or press F11 to execute a query (similar to Oracle Forms frmres files)). However, be aware that this includes some code you have to write (actually quite some code to be honest).
http://www.oracle.com/technetwork/developer-tools/adf/learnmore/79-global-template-button-strategy-360139.pdf (are there an example implementation?), or
http://one-size-doesnt-fit-all.blogspot.dk/2010/11/adf-ui-shell-supporting-global-hotkeys.html
Actually these are implementations as they come with example code for you to use and customize, do they? So what is this question asking for more ? Also note that global buttons don't quite have anything in common with the question you asked. I assume you want to see it as an implementation of the Forms toolbar that operates on the form or table the focus is in. This however does not work for the web as there is nothing that keeps track of which component has a focus and to what iterator (data block) it belongs. This would involve even more coding (though possibly doable)
Frank -
Best Practice for Extracting a Single Value from Oracle Table
I'm using Oracle Database 11g Release 11.2.0.3.0.
I'd like to know the best practice for doing something like this in a PL/SQL block:
DECLARE
v_student_id student.student_id%TYPE;
BEGIN
SELECT student_id
INTO v_student_id
FROM student
WHERE last_name = 'Smith'
AND ROWNUM = 1;
END;
Of course, the problem here is that when there is no hit, the NO_DATA_FOUND exception is raised, which halts execution. So what if I want to continue in spite of the exception?
Yes, I could create a nested block with EXCEPTION section, etc., but that seems clunky for what seems to be a very simple task.
I've also seen this handled like this:
DECLARE
v_student_id student.student_id%TYPE;
CURSOR c_student_id IS
SELECT student_id
FROM student
WHERE last_name = 'Smith'
AND ROWNUM = 1;
BEGIN
OPEN c_student_id;
FETCH c_student_id INTO v_student_id;
IF c_student_id%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('not found');
ELSE
(do stuff)
END IF;
CLOSE c_student_id;
END;
But this still seems like killing an ant with a sledge hammer.
What's the best way?
Thanks for any help you can give.
WayneDo not design in order to avoid exceptions. Do not code in order to avoid exceptions.
Exceptions are good. Damn good. As it allows you to catch an unexpected process branch, where execution did not go as planned and coded.
Trying to avoid exceptions is just plain bloody stupid.
As for you specific problem. When the SQL fails to find a row and a value to return, what then? This is unexpected - if you did not want a value, you would not have coded the SQL to find a value. So the SQL not finding a value is an exception to what you intend with your code. And you need to decide what to do with that exception.
How to implement it. The #1 rule in software engineering - modularisation.
E.g.
create or replace function FindSomething( name varchar2 ) return foo.col1%type is
id foo.col1%type;
begin
select col1 into id from foo where col2 = upper(name);
return( id );
exception when NOT_FOUND then
return( null );
end;
And that is your problem. Modularisation. You are not considering it.
And not the only problem mind you. Seems like your keyboard has a stuck capslock key. Writing code in all uppercase is just as bloody silly as trying to avoid exceptions. -
Best practice for backing bean population? (also, ActionListener RANT)
Hello,
I am about 3/4 of the way through development of a small to medium size JSF application. Sometimes I really like JSF, but much of the time I am left puzzled or frustrated for hours trying to find workarounds to JSF's bugs/glitches and design flaws.
For example, early on, I was impressed with how easily it was to invoke a method from a page using an actionlistener. Now that I'm actually building things with JSF, the actionlistener funtionality still seems cool, but incredibly half baked. I find myself using request parameters LIKE CRAZY to work around the fact that JSF doesnt support passing parameters directly to backing bean methods. This feels awkward and wrong considering the fact that JSF is intended to abstract the HTTP underpinnings. To add insult to injury, I often have to iterate through ALL of the request parameters looking for one that has an id with an ending matching my desired property name (since JSF appends it's own crap to the beginning). I don't like doing things in a hacky way. This seems very hacky, and I feel dirty doing it.
So, my first question is, what is the best practice for populating backing beans??? How do others accomplish this. I can think of several other approaches, but none feel less hacky.
Second, are there plans in the next spec (please say there are) to allow parameters to be passed to backing bean methods? If not, WHY THE HECK NOT?
Even though JSF expert group people have been conspicuously absent from this forum of late, I'd really appreciate responses from you as well.
Thank you for your thoughts.Hi BrownBear,
I've been using JSF for about 6 months now and I'd be glade to help as much as I can.
Concerning parameters, I'm not sure what your issue is but I use the f:param tag to pass them. If you could post an example of what you are trying to do, I could see exactly what your issue is. Maybe the f:param can't help you.
As for best practice for populating backing beans, I personaly try to let JSF do as much as possible. For example, if I have a backing bean with five properties, I make sure that they all are on the JSP page the bean serves. If one of the property is just there as an Id like, lets say, a Person ID (DB row key), then I put it on my JSP page as a hidden input field. I do the same with the properties that only for display, if I want them to be back in my bean when request comesback.
Hope this help some how. Please, feel free to ask specific questions related to your specific problem and I monitor this post and trnasfer to you the ;little JSF experience I have.
I'm pretty happy with JSF as it is but it sure needs improvements. :) What the heck, it's version 1.01 after all, and the next release should be a great one with the integration of JSTL.
Cheers
Maybe you are looking for
-
Successful install of 8.1.7 on Solaris 8 with more than 256Mb RAM
To all who have struggled with this one, like me. You owe me a bottle of Rogaine.... but I will accept a bottle of Jack instead. It appears that the kernel parameters published in the Install Guide are only good for Solaris 8 with up to 256Mb RAM If
-
Problem clearing a move request
Hi, I've got a simple Exchange 2010 setup running along a 2007 insallations. I have 2 DC's both running 2008 but not R2. My issue is, I have moved a couple of users using the local move request. One of them I delete the move request as soon as it had
-
Installing Enterprise Manager 10g Grid Control Using an Existing Database
I want to install Enterprise Manager 10g Grid Control 10.2.0.3 using an existing database. This database is RAC 10.2.0.2. and I use it as Infrastructure Metadata Repository. I is said in Oracle documentation that SYSMAN schema has to be dropped, thus
-
hi! i try to install ecc5 & oracle 9i. i was successfully installed CI ( ecc5,uni-code,abap ). when i try to install DB port, at the time of DATABASE LOAD( R3load shows running 1: waiting ), the following error will occur. log file : SAPSSEXC.log sho
-
When opening a file for keynote 6.2, it comes up"....." cannot be open. How can it be opened?