Я получаю сообщение об ошибке @ $ {tempStudent.FirstName} [duplicate]

Если вы хотите сделать более простой способ вывода шестнадцатеричного числа, вы можете написать такую ​​функцию:

Обновленная версия представлена ​​ниже; есть два способа: базовый индикатор 0x может быть вставлен, со сносками, детализирующими различия между ними. Исходная версия сохраняется в нижней части ответа, чтобы не было неудобства для тех, кто ее использовал.

Обратите внимание, что как для обновленных, так и для оригинальных версий может потребоваться некоторый пошив для систем, в которых размер байта является многократно из 9 бит.

namespace detail {
    constexpr int HEX_DIGIT_BITS = 4;
    //constexpr int HEX_BASE_CHARS = 2; // Optional.  See footnote #2.

    // Replaced CharCheck with a much simpler trait.
    template struct is_char
      : std::integral_constant::value ||
                               std::is_same::value ||
                               std::is_same::value> {};
}

template
std::string hex_out_s(T val) {
    using namespace detail;

    std::stringstream sformatter;
    sformatter << std::hex
               << std::internal
               << "0x"                                             // See footnote #1.
               << std::setfill('0')
               << std::setw(sizeof(T) * CHAR_BIT / HEX_DIGIT_BITS) // See footnote #2.
               << (is_char::value ? static_cast(val) : val);

    return sformatter.str();
}

Его можно использовать следующим образом:

uint32_t       hexU32 = 0x0f;
int            hexI   = 0x3c;
unsigned short hexUS  = 0x12;

std::cout << "uint32_t:       " << hex_out_s(hexU32) << '\n'
          << "int:            " << hex_out_s(hexI)   << '\n'
          << "unsigned short: " << hex_out_s(hexUS)  << std::endl;

См. обе опции (как указано в сносках ниже) live: здесь .

Сноски:

  1. Эта строка отвечает за отображение базы и может быть одной из следующих:
    << "0x"
    << std::showbase
    
    Первая опция будет отображаться неправильно для пользовательские типы, которые пытаются вывести отрицательные шестнадцатеричные числа как -0x##, а не как , при этом знак отображается после базы (как 0x-##), а не перед ней. Это очень редко проблема, поэтому я лично предпочитаю этот вариант. Если это проблема, то при использовании этих типов вы можете проверить отрицательность перед выводом базы, а затем использовать abs() (или пользовательский abs(), который возвращает значение без знака , если вам нужно чтобы иметь возможность обрабатывать наиболее отрицательные значения в системе дополнений 2) на val. Второй вариант будет опускать базу, когда val == 0, отображая (например, для int, где int - 32 бита) 0000000000 вместо ожидаемого 0x00000000. Это происходит из-за того, что флаг showbase обрабатывается как printf() #. Если это проблема, вы можете проверить, есть ли val == 0, и применять специальную обработку, когда это происходит.
  2. В зависимости от того, какой вариант был выбран для отображения базы, необходимо изменить две строки. Если вы используете << "0x", тогда HEX_BASE_CHARS не требуется, и его можно опустить. Если используется << std::showbase, то значение, указанное в setw(), должно учитываться для этого:
    << std::setw((sizeof(T) * CHAR_BIT / HEX_DIGIT_BITS) + HEX_BASE_CHARS)
    

Исходная версия выглядит следующим образом:

// Helper structs and constants for hex_out_s().
namespace hex_out_helper {
    constexpr int HEX_DIGIT_BITS = 4; // One hex digit = 4 bits.
    constexpr int HEX_BASE_CHARS = 2; // For the "0x".

    template struct CharCheck {
        using type = T;
    };

    template<> struct CharCheck {
        using type = char;
    };

    template<> struct CharCheck {
        using type = char;
    };

    template using CharChecker = typename CharCheck::type;
} // namespace hex_out_helper


template std::string hex_out_s(T val) {
    using namespace hex_out_helper;

    std::stringstream sformatter;
    sformatter << std::hex
               << std::internal
               << std::showbase
               << std::setfill('0')
               << std::setw((sizeof(T) * CHAR_BIT / HEX_DIGIT_BITS) + HEX_BASE_CHARS)
               << (std::is_same, char>{} ? static_cast(val) : val);
    return sformatter.str();
}

, который затем можно использовать следующим образом:

uint32_t       hexU32 = 0x0f;
int            hexI   = 0x3c;
unsigned short hexUS  = 0x12;

std::cout << hex_out_s(hexU32) << std::endl;
std::cout << hex_out_s(hexI) << std::endl;
std::cout << "And let's not forget " << hex_out_s(hexUS) << std::endl;

Рабочий пример: здесь .

16
задан ROMANIA_engineer 26 January 2016 в 13:12
поделиться

3 ответа

javax.el.PropertyNotFoundException: свойство 'foo' не найдено в типе com.example.Bean

Это буквально означает, что упомянутый класс com.example.Bean не имеет общедоступный (нестатический!) метод getter для указанного свойства foo. Обратите внимание, что само поле здесь не имеет значения!

Имя открытого метода getter должно начинаться с get, за которым следует имя свойства, которое имеет заглавные буквы только в первой букве имени свойства, как в Foo .

public Foo getFoo() {
    return foo;
}

Таким образом, вам необходимо убедиться, что существует метод получения, точно соответствующий имени свойства, и что метод public (не static) и что метод не принимать любые аргументы и возвращать не void. Если у вас есть один, и он по-прежнему не работает, то есть вероятность, что вы были заняты редактированием кода вперед и назад без прочной очистки сборки, восстановления кода и повторного развертывания / перезапуска приложения. Вы должны убедиться, что вы это сделали.

Для свойств boolean (не Boolean!) Имя метода getter должно начинаться с is вместо get.

public boolean isFoo() {
    return foo;
}

Независимо от типа, наличие самого поля foo, таким образом, не имеет значения. Он может иметь другое имя или быть полностью отсутствующим или даже быть static. Все ниже должно быть доступно ${bean.foo}.

public Foo getFoo() {
    return bar;
}

public Foo getFoo() {
    return new Foo("foo");
}

public Foo getFoo() {
    return FOO_CONSTANT;
}

Понимаете, это не то, что подсчет, но сам метод геттера. Обратите внимание, что само имя свойства не должно быть капитализировано в EL. Другими словами, ${bean.Foo} никогда не будет работать, это должно быть ${bean.foo}.

См. Также:

53
ответ дан Community 16 August 2018 в 04:04
поделиться
  • 1
    Хорошо, но есть одна небольшая проблема. Мой запрос связан с левым запросом. Ответная переменная находится в таблице i mysql, которая соединена. – Ilkar 20 December 2011 в 17:28
  • 2
    Это не имеет ничего общего с HQL. Это связано с вашей моделью (класс javabean). В классе com.pool.app.domain.Pool такого метода нет. Вы должны убедиться, что он имеет этот метод или убедиться, что вы ссылаетесь на правильное имя свойства в EL. – BalusC 20 December 2011 в 17:42
  • 3
    хорошо, так что с самого начала - у меня есть две таблицы в моей mysql. Эти таблицы сопоставляются с POJO-файлами. Одна таблица - Pool, а вторая - PoolQuestion. В пуле POJO нет getAnswer, потому что «ответ» находится в таблице PoolQuestion, и он отображается в PoolQuestion. Таким образом, im делает запрос, основанный на Pool.java (без getAnswer), и левый соединяет PoolQuestion.java (есть getAnswer). Я отправляю ответ на контроллер на основе Pool.java, а затем на представление, так как я понимаю, что не может быть «getAnswer», потому что в пуле POJO нет ответа. Но что теперь делать ... – Ilkar 20 December 2011 в 17:53
  • 4
    Ну, а затем добавьте класс getPoolQuestion() в Pool и используйте ${pool.poolQuestion.answer}, как в вашем сообщении об ошибке? Тем не менее, я предлагаю пройти через базовый учебник / книгу и поместить все концепции отдельно, а не рассматривать это как одну вещь. Проблема дизайна модели в свою очередь не связана с JSP / JSTL / EL. – BalusC 20 December 2011 в 17:55
  • 5
    По прошествии слишком большого времени, глядя на это, я искал его и запустил это. Очень полезно ... Однако кажется, что это довольно сложный способ установить это ... – Francky_V 1 December 2017 в 03:27

Я считаю, что идентификаторы доступа не соответствуют соглашениям об именах бинов, и поэтому исключение выбрано. Они должны быть следующими:

public Integer getId() { return id; }    
public void setId(Integer i){ id= i; }
5
ответ дан bummi 16 August 2018 в 04:04
поделиться

Я столкнулся с аналогичным типом проблемы: Code Snippet:

<c:forEach items="${orderList}" var="xx"> ${xx.id} <br>
</c:forEach>

После списка заказов было следующее: «$ {orderList}», из-за чего переменная xx скрывалась в String и не могла вызвать xx.id.

Поэтому убедитесь, что в пространстве. Иногда они играют решающую роль. : Р

-2
ответ дан Rajat 16 August 2018 в 04:04
поделиться
  • 1
    Это не отвечает на вопрос, где явно нет такого лишнего пространства. – trincot 3 February 2018 в 23:55
Другие вопросы по тегам:

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