пустая регистрация jsf язык выражения

Посмотрите этот Язык Выражения

styleClass="#{obj.validationErrorMap eq null ? ' ' :  
     obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"

Даже если карта является пустой, highlight_row стиль становится прикладным.

Таким образом, я изменился на

styleClass="#{empty obj.validationErrorMap ? ' ' :  
     obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}"

Даже тогда, highlight_row становится прикладным.
если карта empty OR null Я не хочу, чтобы любой стиль был применен.

Какая-либо справка? и причины этого поведения?

51
задан BalusC 5 February 2010 в 03:11
поделиться

1 ответ

Для обновления существующего объекта данными из исходного объекта можно использовать такие инструменты, как AutoMapper. Действие контроллера для обновления может выглядеть следующим образом:

[HttpPost]
public ActionResult Update(MyViewModel viewModel)
{
    MyDataModel dataModel = this.DataRepository.GetMyData(viewModel.Id);
    Mapper<MyViewModel, MyDataModel>(viewModel, dataModel);
    this.Repostitory.SaveMyData(dataModel);
    return View(viewModel);
}

Кроме того, что видно в приведенном выше фрагменте:

  • Данные POST для просмотра модели + проверка выполняется в ModelBinder (могут быть расширены с помощью пользовательских привязок)
  • Обработка ошибок (т.е. перехват сообщений об исключениях доступа к данным в репозитории) может выполняться фильтром [HandleError]

Действие контроллера является довольно тонким и проблемы разделяются: проблемы сопоставления рассматриваются в конфигурации AutoMapper, проверка выполняется ModelBinder и доступ к данным в репозитории.

-121--797246-

Настоятельно рекомендую CLR через C # Джеффри Рихтера. В частности, глава 21 подробно описывает назначение и использование доменов приложений.

В ответ на ваши вопросы/вопросы:

  • AppDomains не защитит ваше приложение от незаконного неуправляемого кода. Если это проблема, скорее всего, потребуется использовать полную изоляцию процессов, предоставляемую ОС.

  • Связь между доменами приложений выполняется с помощью удаленного взаимодействия .NET для обеспечения изоляции. Это может быть через маршал по ссылке или маршал по семантике ценностей, с компромиссом между производительностью и гибкостью.

  • AppDomains - это облегченный способ достижения процесса, такого как изоляция в управляемом коде. AppDomains считаются легкими, поскольку в рамках одного процесса можно создать несколько доменов AppDomain, что позволяет избежать накладных расходов на ресурсы и производительность для нескольких процессов ОС. Кроме того, один поток может выполнять код в одном AppDomain, а затем в другом AppDomain, так как Windows ничего не знает о AppDomain (см. это, используя System.AppDomain.CurrentDomain)

-121--2396271-

Используйте пустой (он проверяет и пустоту) и группирует вложенный тег Таким образом, так:

styleClass="#{empty obj.validationErrorMap ? ' ' :  
 (obj.validationErrorMap.contains('key') ? 'highlight_field' : 'highlight_row')}"

Если все еще напрасно (я бы затем проверил конфигурационные элементы JBoss EL), используйте «обычный» подход EL:

styleClass="#{empty obj.validationErrorMap ? ' ' :  
 (obj.validationErrorMap['key'] ne null ? 'highlight_field' : 'highlight_row')}"

Update : согласно комментариям, Map оказывается фактически List (пожалуйста, работайте над своими соглашениями об именовании). Чтобы проверить, содержит ли List предметов «нормальный» способ EL, используйте JSTL fn: contains (хотя явно не задокументирован, он также работает для List ).

styleClass="#{empty obj.validationErrorMap ? ' ' :  
 (fn:contains(obj.validationErrorMap, 'key') ? 'highlight_field' : 'highlight_row')}"
78
ответ дан 7 November 2019 в 10:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: