Who is Participating?

of course if there is no instead of trigger is attached on your view,
you may not able to save your changes, except you use the
ON-UPDATE/ON-INSERT/ON-DELETE trigger on block-level
to update the physical tables of the view

instead of placing NULL in the ON-LOCK trigger in case of
you want to lock, you can place there also

SELECT * FROM physicalTable WHERE key = :blockkey FOR UPDATE;
--repeat for every table in the view

Lot many workarounds but does not work for me. One thing I noticed is Forms tries to lock row by adding rowid in front of view columns. Is there any way to prevent Forms from doing so?
I am able to update view in SQL*Plus wihout any issues.

I agree with kretzschmar, you need to write an ON-LOCK trigger manually for a block that is based on a join view, but I think his syntax example is incomplete. I think the trigger syntax you need is more like this:
declare
cursor c_lock is select 1
from [base table]
where [key column] = :[block_name].[key_column]
for update of [any column] nowait;
dummy number;
begin
open c1;
fetch c1 into dummy;
close c1;
exception
when others then
[display a message or alert about the record lock problem]
end;