B4J Question [ABMaterial] Modal and B4JS doesn't work well togheter


Active Member
Licensed User
Longtime User

I'm trying to use B4JS for handle user input at a login modal. Everything works fine until I try to get the ABMInput component on HandleLogin sub.
When I try to open the Login Modal after handlelogin was executed, the page freezed for a period, and I got an error on Chrome Dev Console and an error and B4J. Eventually after some time the Login Modal shows up.

Chrome Dev Error:
Uncaught TypeError: Cannot read property 'apply' of undefined
    at x.<anonymous> (core.4.38.min.js:1)
    at x.dispatchEvent (core.4.38.min.js:1)
    at WebSocket.<anonymous> (core.4.38.min.js:1)
(anonymous) @ core.4.38.min.js:1
x.dispatchEvent @ core.4.38.min.js:1
(anonymous) @ core.4.38.min.js:1

B4J error:
    at anywheresoftware.b4j.object.WebSocket$SimpleFuture.getValue(WebSocket.java:63)
    at com.ab.abmaterial.ABMInput.getVisibility(Unknown Source)
    at com.ab.abmaterial.ABMInput.RefreshInternal(Unknown Source)
    at com.ab.abmaterial.ABMCell.RefreshInternalExtra(Unknown Source)

I've identified that the error happens when I try to get the ABMInput (login field): (Line 8 on following code)
public Sub HandleLogin(LoginFromPage As String)

    Dim x As ABMModalSheet = page.ModalSheet("login")
    If page.ws.Session.GetAttribute2("IsAuthorized", "") = "" Then
        'if the next line is commented problem does not happen
        Dim y As ABMInput = x.Content.Component("logininp1")        '********Here********
    End If

'    '  user was successful in login.  Now navigate to xxx...
End Sub

If that line is commented problem doesn't happen, but also I can't get user login.
If I don't use B4JS everything works fine. But I would like to use it to handle user input directly on browser without overhead the server.

Attached a small project to reproduce the problem.

Below a video showing the problem:

Thank you very much.


  • Template.zip
    63.4 KB · Views: 131


Licensed User
Longtime User
I'll have to investigate further. Something weird is going on. The good news is there is nothing wrong with your code and the 'Dim y As ABMInput = x.Content.Component("logininp1")' line. The problem starts when you try to open the modalsheet a second time after you've pressed login. For some reason, re-opening a modal with B4JS code tries to run a GetVisibility and GetEnabled on the input field that does not exist (yet). Then a browser error occurs (which halts all javascript execution) and of course your second error in the B4J logs is just because it timeouts waiting for something from the browser.
Upvote 0