diff --git a/enjoy/__init__.py b/enjoy/__init__.py index a8ccaf5..be6b7b3 100644 --- a/enjoy/__init__.py +++ b/enjoy/__init__.py @@ -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字典) ) diff --git a/enjoy/templates/layout-test.html b/enjoy/templates/layout-test.html new file mode 100644 index 0000000..e583bd7 --- /dev/null +++ b/enjoy/templates/layout-test.html @@ -0,0 +1,32 @@ +#@layout() +### 调用 layout.html 中定义的模板函数 layout() + +#define main() +