Hello!
For Jmix 1.x (Vaadin 8x and GWT) this is uncommon task. I suggest several proposals to do this:
1. Simple JS
@Subscribe
public void onAfterShow(AfterShowEvent event) {
String generatedClassName = "no-copy-password-field" + randomAlphanumeric(6);
this.passwordField.addStyleName(generatedClassName);
// Define and execute the JavaScript to prevent paste
String script = "const elements = document.getElementsByClassName('"+ generatedClassName +"');\n" +
"for (let i = 0; i < elements.length; i++) }\n" +
" elements[i].addEventListener('paste', function(event) { event.preventDefault(); });\n" +
"}";
JavaScript.getCurrent().execute(script);
}
Explanation:
- We are generating unused unique css
class name and giving to ours password field
- Finding all elements inside screen with given
class name. But class name is unique and we will iterate over only one element and this is our password field. Then we will apply event listener for pasting that preventing paste event const elements = document.getElementsByClassName('${generatedClassName}');
for (let i = 0; i < elements.length; i++) }
elements[i].addEventListener('paste', function(event) { event.preventDefault(); });
}
2. Connectors and Extension
Other way to do it is to use AbstractExtensionConnector. In case, this is different way to execute same javascript. You can find example in io.jmix.ui.widget.client.button#JmixCopyButtonExtensionConnector.
This mechanism is need to work with javascript RPCs with state.
Conclusion
In your case that does not contain any stateful operations, better be to use first solution. If you really need to use second solution, text here or see io.jmix.ui.widget.client.button#JmixCopyButtonExtensionConnector in JmixUI sources.