Japid: Странное поведение при получении значения ключа из HashMap

<p> THAT'S OK: ${((Map<String,Integer>)view.get("upgrade_assignment_type_map")).toString()} </p>

<p> THAT'S ALSO OK:
for( String _name : ((Map<String, Integer>)view.get("upgrade_assignment_type_map")).keySet() ) {
<p> ${_name}: ${((Map<String, Integer>)view.get("upgrade_assignment_type_map")).get(_name)} </p>
}
</p>
<br><br>
<p> SADLY THAT'S NOT OK::: ${((Map<String, Integer>)view.get("upgrade_assignment_type_map")).get("MANUAL")} </p>

Приведенный выше фрагмент кода выводит следующий вывод, что меня удивляет:

THAT'S OK: {AUTO_WITH_BALANCE_EMPHASIS=2, AUTO_WITH_OFFENSIVE_EMPHASIS=0, MANUAL=3, AUTO_WITH_DEFENSIVE_EMPHASIS=1}

THAT'S ALSO OK:

AUTO_WITH_BALANCE_EMPHASIS: 2

AUTO_WITH_OFFENSIVE_EMPHASIS: 0

MANUAL: 3

AUTO_WITH_DEFENSIVE_EMPHASIS: 1



SADLY THAT'S NOT OK:::

Последняя строка сегмента кода пытается получить значение ключа "MANUAL", но оно не печатает значение, и если я пытаюсь преобразовать его в toString (например, ${((Map<String, Integer>)view.get("upgrade_assignment_type_map")).get("MANUAL").toString()}) это дает мне ноль во время выполнения. Я не понимаю, почему это происходит?

и когда я печатаю длину (после первого двоеточия <p> ${_name}: ${_name.length()} : ${((Map<String, Integer>)view.get("upgrade_assignment_type_map")).get(_name)} </p>) каждого ключа я получил:

AUTO_WITH_BALANCE_EMPHASIS: 29 : 2

AUTO_WITH_OFFENSIVE_EMPHASIS: 29 : 0

MANUAL: 10 : 3

AUTO_WITH_DEFENSIVE_EMPHASIS: 30 : 1

Примечание: я создаю карту внутри исходного кода Java как Map<String, Integer> nameToTypeMap = Maps.newHashMap();

2 ответа

Решение

Eclipse не отображал недопустимые символы, и в этой строке были недопустимые символы (которые были удивительно компилируемыми), поэтому, когда я открыл этот конкретный файл в vim, он показывает мне и я удалил эти недопустимые символы. Это решает мою проблему.

Я подозреваю, что запись "MANUAL" имеет непечатный символ где-то в нем. Измените одну из ваших рабочих строк следующим образом:

<p> KEY_LENGTHS:
for( String _name : ((Map<String, Integer>)view.get("upgrade_assignment_type_map")).keySet() ) {
<p> ${_name}: ${_name.length()}</p>
</p>

Если это показывает MANUAL с длиной, отличной от 6, это говорит о том, что я прав, и вы должны посмотреть на свой источник данных, чтобы выяснить, откуда взялся дополнительный символ.

Если нет, я бы по крайней мере попытался отладить это вне HTML-части. Я не использовал платформу Play, но, вероятно, должен быть какой-то код, заполняющий это представление... если вы можете взломать там отладчик, это, вероятно, сделает диагностику намного проще.

Другая возможность состоит в том, что запись содержит не-ASCII-символ, который выглядит как ASCII-символ, но на самом деле это не так. Если вы посмотрите на источник HTML, вы сможете увидеть это (и, возможно, даже непечатаемый символ, в зависимости от того, как он обрабатывается).

Другие вопросы по тегам