Исправить исключение NullReferenceException можно с помощью Null-условных операторов в c # 6 и написать меньше кода для обработки нулевых проверок.
Он используется для проверки нуля до выполнения доступа к члену (?. ) или index (? [).
Пример
var name = p?.Spouse?.FirstName;
эквивалентен:
if (p != null)
{
if (p.Spouse != null)
{
name = p.Spouse.FirstName;
}
}
В результате имя будет нулевым когда p равно null или когда p.Spouse имеет значение null.
В противном случае имени переменной будет присвоено значение p.Spouse.FirstName.
Для получения дополнительной информации: Операторы с нулевым условием
Если вы не используете ajax или все еще используете JSF 1.x, и вам действительно нужно вызвать бизнес-действие в методе cancel()
(т. е. просто перезагрузить страницу недостаточно), тогда ваш лучший выбор для добавления immediate="true"
к кнопке. Таким образом, все поля ввода, которые не имеют immediate="true"
, будут пропускаться при обработке.
<h:commandButton value="Cancel" action="#{bean.cancel}" immediate="true" />
В JSF 2.x гораздо лучше отправить форму на <f:ajax>
, которая по умолчанию только процессы @this
вместо @form
.
<h:commandButton value="Cancel" action="#{bean.cancel}">
<f:ajax />
</h:commandButton>
Если вы хотите перейти на другую страницу здесь, добавьте ?faces-redirect=true
к результату в методе cancel()
.
Или, если вам вообще не нужно вообще вызывать какие-либо бизнес-действия, просто используйте <h:button>
, в котором вы прямо указываете результат (неявный) результат навигации.
<h:button value="Cancel" outcome="previouspage" />
Это будет в основном перезагрузите страницу запросом GET. <h:button>
не существует в JSF 1.x, но вы также можете просто использовать для этого простой HTML + JS.