JSF :: Model Of Backing Beans / Separated Class Or Just Properties?
May 29, 2014
I have seen in some examples like URL... a good design is to have the model and the action methods in one just single bean and the model not to be a separated class but a few properties like this:
public class CustomerBean implements Serializable{
//DI via Spring
CustomerBo customerBo;
[b]public String name;[/b]
[b]public String address;[/b]
//getter and setter methods
[code]...
Some questions:
1. If you are using hibernate or any other ORM like the above example(URL...), why not to use the hibernate pojo bean directly like it represented the form instead of using properties?:
public class CustomerBean implements Serializable{
//DI via Spring
CustomerBo customerBo;
[b]Customer customer;[/b] //represents the properties of a form
//getter and setter methods
public void setCustomerBo(CustomerBo customerBo) {
this.custom
2. Why is it said that JSF represents the purest MVC? Spring separates the model from the view too and Struts does too. I dont really understand it
What is the best way to synchronize a Model representing a complex UI composite w/ a FlowPane's backing list?
Currently I have a change listener on the Model. Upon an add I create a new UI composite and manually add it to the FlowPane's backing list via flowPane.getChildren().add(). Similarly if there is a remove, I iterate over the FlowPane's children, grab the right Node, and remove it. Similarly, if there is a modification detected, I iterate over the FlowPane's children, grab the right Node, remove it, recreate the UI composite, and re-add it to the list. I also need the list to be sorted, so I implemented a UIComposite comparator and call FXCollections.sort() on the FlowPane's backing list. I feel like that is hacky, but it works. It would be cool if I could maintain sort order in my model somehow and have that automatically propogated to the FlowPane's list.
I am correct in assuming that there is no way to have a complex binding in between an ObservableList<CompositeViewModel> and the FlowPane's backing list (ObservableList<T>)?
Some kind of translator that could create a new UIComposite whenever there is a new CompositeViewModel added to the Model list.
I have created Person.java with the following attributes:
private String firstName; private String lastName; private int age;
My main method parses the XML, loops through each person, and gets the attributes for each.
I need to create instances of my Person class. I could write something like this:
Person person = new Person(); for (int i = 0; i < attributes.getLength; i++) { if (attribute.getName(i) = "firstname") { person.firstName = attribute.getValue(i);} if (attribute.getName(i) = "lastname") { person.lastName = attribute.getValue(i); } if (attribute.getName(i) = "age") { person.age = attribute.getValue(i); } }
Since my actual XML has quite a few attributes, I would rather do something like this:
Person person = new Person(); for (int i = 0; i < attributes.getLength(); i++) { person[attribute.getName(i)] = attribute.getValue(i); }
I am using a command button to post a form to backing bean method. At the end of that method I am attempting to redirect to an external site after setting various options in the response. I get an IllegalState Exception because of the redirect.
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendRedirectWithStatusCode (WebAppDispatcherContext.java:571) at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendRedirect (WebAppDispatcherContext.java:528) at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendRedirect(SRTServletResponse.java:1234) at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:426) at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:181)
here is the problem code from the backing bean method:
The number of dot separated segment in front of the string may vary, but it doesn't matter since I only need to extract the last two segments from the string (int this case : 33423 and AMDAC-4). How do I do this efficiently? I need to process hundreds of thousands of these strings every day. it is guaranteed that the segments will always be separated by dots only (no whitespaces in the string)
This is a general question about best practices for handling persisted data in JSF. My JSF page is going to have several fields that map to a managed bean. Upon a button click the fields of this bean are going to be persisted in a database. Is it better to use another bean with application scope to handle the JDBC code, or should I have a method in the bean itself to handle that? Similarly I'll need a method to retrieve the information upon a user request.
I'm trying to understand the concurrent model of each EJB session bean types.
The singleton is well documented and seems clear to me... Only one instance and many threads using it but each method by default is synchronized because @Lock is defaulted to WRITE. We can let multiple threads use on method with @Lock(READ).
The stateless beans are in a pool I think I read somewhere that the container will ensure only one thread is using one instance at a time but this instances are recycled/reused so many threads can use the same instance but one at a time.
Is this correct ? or is it possible that multi-threading occur in one instance of SLSB ?If in the client I obtain a single reference of a SLSB and share this "instance reference" in multiple threads is it true that all the threads could use different instances on the server side ?
The stateful instance I obtain in the client is linked to one server instance and any method call will target the same instace. If many threads are using the same reference, all method calls will be synchronized and waiting for a certain amount of time that can be defined in @AccessTimeout and if the timeout is reach will end with a ConcurrentAccessException.
Can we use @Lock(READ) and let many thread use the same method like in a singleton ?
I have a primefaces editable datatable with column filtering feature.The datatable has live scrolling feature.The problem that i am facing here is that both filtering and scrolling are happening correctly with Request scoped managed bean but when the scope of the same bean is changed to view scope(javax.faces.bean.ViewScoped) then the filtering happens but on removing the keyed in key word from filter box the table content is not reset to original state and also i am not able to scroll down to next set of records on reaching the end of scrolling.Cell editing feature is working perfectly.
One thing that i observed is ,currently i am querying 5000 odd records to load into datatable.But if the number of records is limited below 5000 scrolling is happening correctly but problem with filtering remains same.I even tested by upgrading to Primefaces 5.1 from 3.Code snippet of xhtml page
I'm wondering if there's a way to build a template for managed beans which could be extended by a constructor instead of re-writing beans for each entity. I can do that quite easily for Dao objects by creating facades and using those facades to create Dao implementations for specific entities. Not sure if the same concept works for managed beans and haven't really come accross any searches.
I wrote the following but I'm not sure how to implement or even if the concept of generics and templating can be applied to managed beans in the same way it can be applied to Dao classes:
public class BeanTemplate<T> { private ListDataModel<T> listModel; @EJB private GenDao dao; private Class<T> entityClass;
[Code] .....
The above assumes there's only one method needed in the bean. I thought of extending like this:
public class EmployeeBean extends BeanTemplate<Employee> { public EmployeeBean() { super(Employee.class); }
// how can the methods be called??
Is the same concept for creating dao templates possible for managed beans?
I am working on my homework, and everything is fine. But I was wondering if I can fix one thing. basically it prompt from a user for a text file name and save the content as an array. some part of my code is here:
public class arraysort{ static BufferedReader kb = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws Exception { System.out.print("Enter the first name of the file: "); String input = kb.readLine(); int[] firstArray = readFile(input); firstArray = bubbleSort(firstArray);
I was working on my personal project when I realized I needed to split a string and extract 2 elements of it. The way it works is the user enters 2 numbers separated by a comma like this: 4, 8. Then I want to put the first number into a veriable called x and the next number into a variable called y. How can I do this?
If I have the next request scoped JSF bean for example:
public class UserBean { private String name; private String surname; public String saveUser(){ //service is called to save a user } public String updateUser(){ //service is called to update a user
[Code] ....
1.In struts for example the Action classes are singletons and I think is the way it has to be because they contain business logic and is the same logic for every user but in JSF because of you mix properties from a form and methods with business logic, these beans have to be request scoped like the above one but is very wierd that a bean which contains business logic(saveUser()....) be request scoped;I dont see it effective, is like creating a new servlet each time you want to save a user but I think is the way JSF works, right?
2 To avoid the mixing of form properties in a bean with business logic, some people say to have the form beans request scoped and actions beans session scoped.
- Is this right? - How then can you get the request form bean in the action bean? - The scopes in JSF are request, session and view so you cannot create singleton action beans, the best you can get is a session action bean, right?. Once again I dont see the point of creating action beans with session scoped,they should be application scoped if it existed
I am trying for a logic that i have some emp ids as a string seperated by commas and i need the substring of emp ids as below. splitting the string as below.
public static void main(String args[]) { String empId = "1,2,3,4,5,6,7,8,9,10"; int i; int count = 9; for (i = 0; i <= count; i = i + 3) { System.out.println("Emp IDs are : " +empId); }}
Result is:
Emp IDs are : 1,2,3,4,5,6,7,8,9,10 Emp IDs are : 1,2,3,4,5,6,7,8,9,10 Emp IDs are : 1,2,3,4,5,6,7,8,9,10 Emp IDs are : 1,2,3,4,5,6,7,8,9,10
But I want the result like:
Emp IDs are : 1,2,3 Emp IDs are : 4,5,6 Emp IDs are : 7,8,9 Emp IDs are : 10
Basically it prompt from a user for a text file name and save the content as an array. some part of my code is here:
public class arraysort{ static BufferedReader kb = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws Exception { System.out.print("Enter the first name of the file: "); String input = kb.readLine();
[Code] ....
As you you may figure, it works if I put numbers separated by each lines. I was wondering if I can change it so that it works when I put numbers separated by space rather then each lines.
I've spent almost 3 hours on googling about java beans and where it is usable. What I've figured out is that a bean has a public non-arg constructor, properties and getters/setters to manipulate them. I also know that a bean contains no logic, only fields. However, I don't fully understand why I need to use beans instead of normal classes even if a class can do the same things like a bean? Are beans used to store data or what?
I am cleaning up print logs from an old system to be used in excel. I can get them down to each value is separated by a comma and looks like this.
TIME,1009 9/18/14,F/A RATIO,0.7590,NET AIR CNTS,66018.2,NET FLAG CNTS,50107.5,BKGROUND CNTS,61.0BW OF FLAG,49.807,DFRAC,-0.1834,ZFRAC,0.0000UP AIR TEMP,104.32,LO AIR TEMP,98.51,SOURCE TEMP,91.11,RCVR TEMP,97.95,,UP HEAD TEMP,93.89,LO HEAD TEMP,81.26
TIME,1026 9/18/14,F/A RATIO,0.7589,NET AIR CNTS,66026.3,NET FLAG CNTS,50107.4,BKGROUND CNTS,61.0BW OF FLAG,49.829,DFRAC,-0.1660,ZFRAC,0.0000UP AIR TEMP,104.93,LO AIR TEMP,98.42,SOURCE TEMP,92.65,RCVR TEMP,99.49,,UP HEAD TEMP,94.82,LO HEAD TEMP,82.23
TIME,1042 9/18/14,F/A RATIO,0.7584,NET AIR CNTS,66076.3,NET FLAG CNTS,50109.2,BKGROUND CNTS,61.0BW OF FLAG,49.955,DFRAC,-0.0652,ZFRAC,0.0000UP AIR TEMP,104.72,LO AIR TEMP,97.91,SOURCE TEMP,93.36,RCVR TEMP,99.52,,UP HEAD TEMP,95.31,LO HEAD TEMP,82.47
Where value follows its header. how can i export this to csv or excel with rows and columns?
I am trying to write a program that will take any comma separated data set and return the values in an arraylist without any commas. Like if I input "hello, world, program, java" it would output an arraylist [hello,world,program,java].
public void run(){ String line = readLine("Enter a CSV-formatted line of data: "); int lowerBound = 0; String entry = new String(""); ArrayList<String> string = new ArrayList<String>();
The first line is the number of test cases and the second line is the corresponding values for the test cases. Java code for taking multiple inputs in the single line separated by a space.
I have an in-cell editable data table with a viewscoped managed bean.I found that the control never goes to the ajax event method onCellEdit when the scope of the bean is @Viewscoped but it works when the scope is changed to request scope.how to get this feature work with viewscope.Below is my code snippet
double sum = a + b + c; System.out.printf("Sum = %d", sum);
Heres the error I'm getting
Enter three positive integers separated by spaces, then press enter: 15 20 9
Sum = Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Double at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.io.PrintStream.format(Unknown Source) at java.io.PrintStream.printf(Unknown Source) at project2.main(project2.java:52)
private String displayFormat = "%02d:%02d:%02d";// produces 00:00:00 hour:min:seconds public void timerHasChanged() { currentTime = System.currentTimeMillis(); // How long has been taken so far? long secsTaken = (currentTime - startTime) / 1000; long minsTaken = secsTaken / 60; secsTaken %= 60; long hoursTaken = minsTaken/60; minsTaken %= 60;
Formatter fmt = new Formatter(); fmt.format(displayFormat, hoursTaken, minsTaken, secsTaken); timerJbl.setText(fmt.toString());
How would i code the get and set method for format, so in property tab a user can choose if they want the timer shown in seconds, or minutes or hours or seconds&minutes