Files
java-10561/docs/TEMPLATE_FIXES.md
2025-09-06 11:58:18 +08:00

92 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 模板修复说明
## 🔧 修复的问题
### 1. 字段注释为空的问题
**问题描述**
- 当数据库表的字段没有注释时,模板渲染会失败
- 错误信息:`field.comment为空`
**修复内容**
#### add.tsx.btl 模板
- **修复前**`${field.comment!}` - 注释为空时显示空字符串
- **修复后**`${field.comment!'字段'}` - 注释为空时显示默认值
具体修改:
```typescript
// 标签显示
label="${field.comment!field.propertyName}"
// 输入框提示
placeholder="请输入${field.comment!'字段'}"
placeholder="请输入${field.comment!'内容'}"
// 条件判断
<% if(field.propertyType == 'String' && field.comment?? && (field.comment?contains('描述') || field.comment?contains('备注') || field.comment?contains('内容'))){ %>
```
#### 配置文件模板
- **index.config.ts.btl**`'${table.comment!'数据'}管理'`
- **add.config.ts.btl**`'新增${table.comment!'数据'}'`
### 2. 智能 userId 字段检测
**问题描述**
- 所有表都生成设置 userId 的代码,即使表中没有 user_id 字段
**修复内容**
#### controller.java.btl 模板
添加了字段检测逻辑:
```java
<% var hasUserIdField = false; %>
<% for(field in table.fields){ %>
<% if(field.propertyName == 'userId'){ %>
<% hasUserIdField = true; %>
<% } %>
<% } %>
<% if(hasUserIdField){ %>
// 记录当前登录用户id
User loginUser = getLoginUser();
if (loginUser != null) {
${table.entityPath}.setUserId(loginUser.getUserId());
}
<% } %>
```
## ✅ 修复效果
### 1. 空注释处理
- **有注释的字段**:正常显示字段注释
- **无注释的字段**:显示字段名或默认提示文本
- **空表注释**:显示"数据"作为默认值
### 2. 智能 userId 处理
- **有 user_id 字段的表**生成完整的用户ID设置代码
- **无 user_id 字段的表**不生成用户ID相关代码
## 🎯 Beetl 模板语法说明
### 空值处理
- `${field.comment!}` - 为空时显示空字符串
- `${field.comment!'默认值'}` - 为空时显示默认值
- `${field.comment!field.propertyName}` - 为空时显示字段名
### 条件判断
- `field.comment??` - 检查字段是否不为null
- `field.comment?contains('文本')` - 检查字段是否包含指定文本
### 变量定义
- `<% var hasUserIdField = false; %>` - 定义布尔变量
- `<% if(hasUserIdField){ %>` - 条件判断
## 🚀 使用建议
1. **数据库设计**:建议为表和字段添加有意义的注释
2. **模板测试**:生成代码前先测试模板在各种数据情况下的表现
3. **错误处理**:模板中添加适当的默认值和空值处理
现在模板更加健壮,能够处理各种边界情况!