增加 addSharedFunction增加共享模板,并做测试

This commit is contained in:
2026-03-04 14:40:55 +08:00
parent c5a2ac3e24
commit fd7d7c5972
5 changed files with 88 additions and 3 deletions

View File

@@ -110,6 +110,41 @@ class Enjoy:
except Exception as e:
raise RuntimeError(f"调用失败: {e}") from e
def addSharedFunction(self, layouts: [str]):
"""添加全局共享函数"""
for layout in layouts:
self._engine.addSharedFunction(layout)
def invoke_engine_method(self, method_name: str, *args, **kwargs) -> Any:
"""
通用方法调用内部_engine的其他可调用方法
:param method_name: 要调用的_engine方法名
:param args: 位置参数
:param kwargs: 关键字参数
:return: 方法调用结果
:raises RuntimeError: 如果Engine未初始化或方法调用失败
"""
if not self._engine:
raise RuntimeError("Engine未初始化请检查Jar包路径")
try:
# 获取_engine的方法
method = getattr(self._engine, method_name)
# 转换Python参数为Java兼容类型
converted_args = [self._convert_python_to_java(arg) for arg in args]
converted_kwargs = {k: self._convert_python_to_java(v) for k, v in kwargs.items()}
# 调用方法并返回结果
return method(*converted_args, **converted_kwargs)
except AttributeError:
raise RuntimeError(f"Engine对象没有方法: {method_name}") from None
except jpype.JException as e:
print(f"\n=== JFinal Enjoy {method_name} 方法调用异常详情 ===")
e.printStackTrace()
raise RuntimeError(f"{method_name}方法调用失败: {e.getMessage()}") from e
except Exception as e:
raise RuntimeError(f"{method_name}方法调用失败: {e}") from e
def close(self):
"""关闭JVM释放资源"""
if self._jvm_started:
@@ -136,6 +171,7 @@ if __name__ == "__main__":
template_base_path=TEMPLATE_BASE_PATH
)
enjoy.addSharedFunction(['layout.html'])
# 3. 准备模板参数
render_data = {
"name": "JFinal Enjoy 5.2.2测试",
@@ -145,7 +181,7 @@ if __name__ == "__main__":
# 4. 渲染模板tempStr是模板文件名相对于TEMPLATE_BASE_PATH
result = enjoy.render(
tempStr="index.html", # 模板文件:./templates/index.html
tempStr="layout-test.html", # 模板文件:./templates/index.html
data=render_data # 渲染数据Python字典
)