Если вы уверены, что рабочий каталог не изменяется между временем создания шаблона и временем его чтения, то вам не нужно устанавливать какое-либо свойство перед инициализацией Velocity: [1110 ]
IncludeRelativePath
, поскольку его цель - позволить #include () и #parse () находить шаблоны в том же каталоге, что и текущий шаблон. Это не относится к вашему случаю использования. file
, потому что он установлен по умолчанию. classpath
, потому что вы даже не используете его Я не знаю, почему ваш код работает локально, а не в производство. Возможно, рабочий каталог изменился. Возможно переменные templateName
и fileName
не согласованы. Возможно, шаблон запрашивается до того, как он будет написан. Есть ли серьезные различия между средами? Есть проблемы с безопасностью? Операционные системы одинаковы? Как отметил soorapadman, это может быть проблема с чувствительностью к регистру между Linux и Windows.
Следующий код должен работать везде:
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.init();
PrintWriter out = new PrintWriter("test.vm");
out.println("hello");
out.close();
Template template = velocityEngine.getTemplate("test.vm");
Если вы обрабатываете событие EditingControlShowing
в DataGridView, вы можете прикрепить обработчик события к лежащее в основе ComboBox событие SelectedIndexChanged
(или SelectedValueChanged
или любое другое событие ComboBox). Он будет срабатывать немедленно при изменении значения ComboBox, и вы можете делать с новым значением все, что захотите.
Пример кода для этого приведен в документации MSDN для DataGridViewComboBoxEditingControl .
Это также может быть полезно для вас. Обработайте событие CurrentCellDirtyStateChanged, проверьте наличие Dirty и зафиксируйте изменение. Затем вы можете использовать свойство CurrentCell для доступа к выбранному значению (при условии, что оно было проверено).