Skip to content
This repository has been archived by the owner on Mar 14, 2021. It is now read-only.

Keybindings on case class with option val #30

Open
ASchmidt84 opened this issue Oct 22, 2020 · 2 comments
Open

Keybindings on case class with option val #30

ASchmidt84 opened this issue Oct 22, 2020 · 2 comments

Comments

@ASchmidt84
Copy link

Hi,

I have a little problem and I missing an example for that.

I have a case class like this:

case class PatientView(number: String,
                       personalData: PersonalData,
                       postalAddress: Option[PostalAddress])

case class PostalAddress(addressLine1: String,
                         addressLine2: Option[String],
                         streetLine: String,
                         postalCode: String,
                         city: String,
                         state: Option[String],
                         countryLine: Option[Country])

And a Textfield and a binding like this:

patientAdapter.addBinding(streetField.text,"${_self.postalAddress().addressLine1()}")

this will lead in an exception! Of course it is None. When I add a StringConverter like this

val conv = StringConverter.toStringConverter[PatientView](r => "OKAY")
    patientAdapter.addBinding(streetField.text,"${_self.postalAddress()}",Some(conv))

will lead in an exception like this

class java.lang.String cannot be cast to class de.hp.patient.api.adt.PatientView (java.lang.String is in module java.base of loader 'bootstrap'; de.hp.patient.api.adt.PatientView is in unnamed module of loader 'app')

How I can access an none and also set an Some on change?

@sfxcode
Copy link
Owner

sfxcode commented Oct 22, 2020

Hi,
first of all usage of the Expression Language should be only used for reading values. There for if the expression lead to an exception, there will be a problem. A solution can be a NULL safe method on your PatientView.
My personal workaround when using optional class data to edit is to use two adapters, with the dependent view is only shown, when there is an address in your case.
The Framework does not create a new PostalAddress if you use a binding path for an optional value of None.

Hope this help,

Greetings Tom

@ASchmidt84
Copy link
Author

Hi Tom,
okay understand. I will create special classes without none. 👍

Another question. If I using a combobox for (example) Countries. How I can use BeanAdapter?

Thank you

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants