Ваш пример кода работает для меня (то есть я собрал в основном одно и то же, и tc - это правда).
Я уверен, что проблема НЕ в том, что тип ввода скрыт - с точки зрения вашего кода обработки скрытый ввод выглядит точно так же, как и любой другой ввод формы. Все они передаются как просто строковое имя и строковое значение ... в этом случае, когда значение преобразуется в логическое значение за кулисами.
То, что я бы сделал в вашем случае, похоже на то, что предложил Павел - попробуйте @FormParam("tc") String tc
и определите, через какое значение строки поступает. Это просто техника отладки; как только вы поймете, что происходит не так и исправите это, вы можете переключить его обратно на логическое значение.
Если бы это был я, мое первое предположение было бы опечаткой - если "имя" ввода не совпадает с тем, что вы даете FormParam, оно получится как ложное.