Getting a non-selected radio buttons from request in servlet Java - java

It may seem strange, but I need to get values of non-selected radio buttons for each radio button's group. I have used the code below to get all the selected buttons values, but I need to get the unselected ones.
ArrayList <String> userSelection = new ArrayList <String>();
Enumeration names = request.getParameterNames();
String selection = "";
while ( names.hasMoreElements() )
{
name = (String) names.nextElement();
userSelection.add(request.getParameter( selection ));
}

The browser will not send you the non-selected buttons. What you'll need to do is either:
Have your code know what all the buttons will be
Create a hidden field with a list of all the possible values.
If you go with #2, take heed of Mr HEBERT'S suggestion to never trust user input.

You simply can't get those values form your request.
It's the browser which will create the request and it doesn't send informations that appears useless for the navigation (such as unused values).
The only way to do that would be to guess the values.
Remember this request could be forged by hand so, never trust user input.

Related

Set combobox items dynamically based on search query

I have a combobox that I would like to act as a search field. When I enter some value I want to call a backend service that would based on the entered value return a list of possible values. I would like to set these values as the combobox items dynamically. So far I have this code:
ComboBox<String> comboBox = new ComboBox<>("Name");
comboBox.setAllowCustomValue(true);
comboBox.setAutofocus(true);
comboBox.addCustomValueSetListener(e -> comboBox.setItems(backendService.getData(e.getValue())));
This works, but it is not ideal, as I (the user) has to type the value, hit enter and focus the combobox again. At this point the matched values from backend are set as items in the combobox. Is there a way to fetch items from the backend dynamically as the user writes in the input with some time delay (e.g. ValueChangeMode.LAZY for TextField) and set them as combobox items while writing user input?
After reading through this link I found a solution using lazy data loading. I had to adjust my backend service to accept a PageRequest object, so the following line of code did exactly what I wanted:
comboBox.setItems(query ->
backendService.getData(PageRequest.of(query.getPage(), query.getPageSize())));

Codename One: How to display the contents of entire properties page

I have a properties page that looks like this
property1=value1
property2=value2
property3=value3
property4=value4
And my plan is to be able to create a page in my app that will display these values and allow the user to change and save them.
The way that I thought I would do this is to create a method that will iterate through the file and populate a text control with the data.
I am using the 'propertyNames' function explained here https://www.codenameone.com/javadoc/com/codename1/io/Properties.html
Unfortunately when I use this, all that is listed are the properties and not the values
Is there a way to show the entire contents of the properties file?
The other way I was thinking about doing it is to create a list of buttons that correspond to the keys - so one button for each key [with the key name as the button label] - and then when the user clicks on the button it displays the key value in an editable text box, and a save button that writes it back to the file.
Is this possible?
Thanks
propertyNames gives you all the keys, then you can retrieve the value of each get key using getProperty:
for(String key:props.propertyNames()){
String value = props.getProperty(key);
output += key+"="+value+"<br/>"; //however you output your stuff
}
After letting the user set new values, you can set them using setProperty(key, newValue).

Play framework forms repeated values - dynamically add controls for new values

I'd like to create a Play form that allows users to enter multiple values for a list in my model. Initially the form should show a single text box, but clicking a "+" button should create a new text box to allow them to enter another value.
The closest I've found is the Play framework documentation on repeated values: https://www.playframework.com/documentation/2.1.0/JavaFormHelpers but this only works for forms pre-populated with multiple email addresses (code below for completeness). How could I add a button to dynamically create a text box to allow the user to add a new email?
#inputText(myForm("name"))
#repeat(myForm("emails"), min = 1) { emailField =>
#inputText(emailField)
}
In my actual model, the list values are actually objects with multiple fields, but I assume if I can add an email field, I'll be able to construct what I need.
Many thanks,
Jim

String Tokenizer.nextElement for JComboBox

I'm using
int TxtAge = Integer.parseInt(tfAge.getText().trim());
to get value from my textfield and search it in database.
Then, I'm using Integer age = Integer.parseInt(stringTokenizer.nextElement().toString()); to go to next attributes in my database.
I have no problem using those codes for textfield but when I'm using the JComboBox the result won't display. How to use the StringTokenizer.nextElement() for JComboBox? Is is the same with TextField?
String sex=(String) stringTokenizer.nextElement();
I tried this code but still failed :(
You seem to have left out the relevant portions of your code, i.e. how you are handling setting/getting items in the JComboBox. Whether you read these values from a database, a file or have them hardcoded is irrelevant to the question.
Since you do ask whether it is the same as with a JTextField, I can at least answer this; it is not the same. The question indicates that you're quite new to Swing. You would probably benefit from working through a basic Swing tutorial, just to get a grip on how to work with these basic GUI elements. For JComboBox, check out Oracles own How to Use Combo Boxes.
Anyways, when working with JComboBox, you will need to first populate it with the values that users can choose from and set the currently selected value. Retrieving the currently selected value is just a simple method call.
Further, you have the possibility of making a combobox editable. This means that the user can edit the text in the combo box to something that was not pre-populated. By default, this option is turned off.
I'll provide some examples.
Initialize:
JComboBox sexComboBox = new JComboBox();
sexComboBox.addItem("Not selected");
sexComboBox.addItem("Male");
sexComboBox.addItem("Female");
sexComboBox.addItem("Do not want to disclose");
By default, the first item you added is selected. To select another one, you need to add one of the following lines:
sexComboBox.setSelectedIndex(1); // zero-based index, "Male" is selected item
sexComboBox.setSelectedItem("Female"); // sets the selected item to "Female"
To enable user to edit the contents to something that was not pre-defined, just add the line:
sexComboBox.setEditable(true);
To retrieve the currently selected value:
String selectedItem = (String) sexComboBox.getSelectedItem();

Retrieving current user entered value from GWT SuggestBox

I'm new to GWT. I have a simple SuggestBox which is populated using a MultiWordSuggestOracle. Users input their data to this SuggestBox, and if they find any match with the existing Suggestions its well and good. I'm able to retrieve this value in the SelectionHandler code as below.
display.getSuggestBox().addSelectionHandler(new SelectionHandler<Suggestion>() {
public void onSelection(SelectionEvent<Suggestion> event) {
String selectedProperty = ((SuggestBox)event.getSource()).getValue();
// do something with the property value
}
});
But users are allowed to enter values which are not already in the Suggestion oracle, in which case I should read this value and do something with this,may be saving to db as a new data.(The thing which I'm looking for is something like a browsers navigation widget where we show suggestions, users can pick up any suggestion or he can type in his new entry and carry on.) What I needed is a way to retrieve this new text user has entered? Data will be read on a button click. What I tried out is this.
display.getSaveBtn().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
String selectedProperty = display.getSuggestBox().getValue();
//String selectedProperty2 = display.getSuggestBox().getText();
// Blank in both cases :(
// tried display.getSuggestBox().getTextBox().getValue(),but blank again
}
});
I tried to employ onChange() event handlers (as shown below)
display.getSuggestBox().addValueChangeHandler(new ValueChangeHandler<String>() {
public void onValueChange(ValueChangeEvent<String> event) {
String selectedProperty = ((SuggestBox)event.getSource()).getValue();
Window.alert("on change -- "+selectedProperty);
}
});
This is working fine except one scenario. Suppose there are two suggestions in the oracle,say 'createTicketWsdl' and 'createTicketTimeout'. When the user types in 'cr', he is opted with these two options, and if he selects 'createTicketWsdl' by pressing keyboard ENTER, then my alert is printing 'createTicketWsdl' which is correct. But if he selects 'createTicketWsdl' using mouse, then my alert is printing 'cr' (I tried to post the screenshot to give a better understanding, but being a new user I'm not allowed).(which I wanted to get as 'createTicketWsdl'since thats what he has selected). Soon after printing my alert, the value in the SuggestBox changes to 'createTicketWsdl'.
Is there a way to retrieve the value of the suggest box? I saw a similiar thread GWT SuggestBox + ListBox Widget, where some source code for a custom widget is available. But I didn't take the pain of trying out that, since what I want is simply get the current value from the SuggestBox and I hope there should be some easy way.
Thanks for all your help!
Your question is not very clear. You need to clarify your language a lil' bit. For example - is the following a question or an assertion? I mean, it sounds like an assertion but it has a question mark.
What I needed is a way to retrieve this new text user has entered?
Also, I do not understand what you mean by "he is opted by". Did you mean to say, "he is presented with the options ..." ?
Therefore, I am guessing your situation.
You have a listbox of existing items.
You have a textbox which allows freeform text entry
Any items whose prefix values matches the current textbox entry, the listbox items would be filtered to be limited to the matching items.
Even if the current textbox entry presents matching prefixes to filtering the listbox, the user can still perform freeform text entry. So, there are two possible cases here
4.1 the user clicks on the list box to select one of the filtered items
4.2 the user press enter key, which triggers selection of the current value of the textbox.
However, you find your widget participating in a race condition, so that when you click on the widget, the ValueChangeHandler gets triggered rather than the SelectionHandler. I do not know the structure of your widget so that is my best guess.
The problem is that you are allowing two separate modes of obtaining an outcome and you probably did not have well-defined state machine to handle choosing the appropriate mode. One mode is by the textbox and the other is by selection on the listbox - and you do not have a well-defined way of which would mode would be effective at any moment.
If my guess is accurate, this is what you need to do:
You must restrict your outcome to coming from only the textbox.
Your listbox selection must not trigger any outcome. Any change in listbox selection must propagate back to the textbox - to allow the user the chance of making further freeform entry based on that value.
only the keyboard enter on the textbox will trigger the final outcome.

Categories