jeecgboot/JeecgBoot · error · RuntimeException
jobinfo_field_id
jobinfo_field_id
Error message
jobinfo_field_id + system_invalid
What it means
Thrown by JobLogController.index when jobId > 0 but xxlJobInfoMapper.loadById(jobId) returns null. This means the user passed a specific job ID filter (e.g., via URL parameter ?jobId=999) for a job that does not exist. The message is a concatenation of two i18n keys: 'jobinfo_field_id' (label 'Job ID') + 'system_invalid' (label 'invalid'), producing something like 'Job ID invalid'.
Source
Thrown at jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/business/controller/JobLogController.java:83
@RequestParam(value = "jobId", required = false, defaultValue = "0") Integer jobId) {
// 1、init JobGroupList
// find all jobGroup
List<XxlJobGroup> jobGroupListTotal = xxlJobGroupMapper.findAll();
// filter JobGroupList
List<XxlJobGroup> jobGroupList = JobGroupPermissionUtil.filterJobGroupByPermission(request, jobGroupListTotal);
if (CollectionTool.isEmpty(jobGroupList)) {
throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
}
List<Integer> jobGroupIds = jobGroupList.stream().map(XxlJobGroup::getId).toList();
// 2、check jobId
if (jobId > 0) {
// valid jobId
XxlJobInfo jobInfo = xxlJobInfoMapper.loadById(jobId);
if (jobInfo == null) {
throw new RuntimeException(I18nUtil.getString("jobinfo_field_id") + I18nUtil.getString("system_invalid"));
}
// valid jobGroup
jobGroup = jobInfo.getJobGroup();
}
// 3、init jobGroup, default first 1
if (!jobGroupIds.contains(jobGroup)) {
jobGroup = jobGroupList.get(0).getId();
}
// 4、init jobInfoList
List<XxlJobInfo> jobInfoList = xxlJobInfoMapper.getJobsByGroup(jobGroup);
List<Integer> jobIds = jobInfoList.stream().map(XxlJobInfo::getId).toList();
// 5、init JobId, default 0
if (!jobIds.contains(jobId)) {
jobId = 0;
}View on GitHub (pinned to 96fb33f5ec)
Solutions
- Verify the job exists: SELECT id, job_desc FROM xxl_job_info WHERE id = <jobId>.
- If the job was deleted, navigate to the log page without the jobId filter (just /joblog) and select a valid job from the dropdown.
- Update or remove stale bookmarks that reference deleted jobIds.
- Add URL parameter validation on the frontend before loading the log page.
Example fix
// before: direct link with hardcoded jobId
<a href="/joblog?jobId=12345">View Logs</a>
// after: validate jobId before navigating
async function viewJobLogs(jobId) {
const job = await api.get(`/jobinfo/loadById?id=${jobId}`);
if (!job.data) {
alert('Job does not exist. Redirecting to log list.');
window.location.href = '/joblog';
return;
}
window.location.href = `/joblog?jobId=${jobId}`;
} Defensive patterns
Strategy: validation
Validate before calling
// Validate job exists before using jobId filter on log page
public boolean jobExists(int jobId) {
if (jobId <= 0) return false;
return xxlJobInfoMapper.loadById(jobId) != null;
} Try / catch
try {
return "business/job.log";
} catch (RuntimeException e) {
if (e.getMessage().contains("system_invalid")) {
model.addAttribute("error", "Specified job does not exist.");
// Fall through without jobId filter
return "business/job.log";
}
throw e;
} Prevention
- Remove stale bookmarks that reference deleted jobIds.
- Validate the jobId parameter on the frontend before loading the log page.
- When sharing deep links to job logs, verify the jobId still exists.
- Handle the invalid jobId gracefully by falling back to the unfiltered log view.
When it happens
Trigger: Navigating to the job log page with a URL like /joblog?jobId=99999 where job 99999 doesn't exist. The job was deleted but the user accessed a bookmarked filtered URL. The jobId parameter was manually entered incorrectly. Concurrent deletion of a job while a user has a filtered log view open.
Common situations: Stale bookmarks pointing to deleted jobs. Deep links shared between users where the target job was later removed. Copy-paste errors in the jobId URL parameter. Testing/debugging with hardcoded jobIds that no longer exist.
Related errors
- joblog_logid_invalid
- jobinfo_glue_jobid_invalid
- jobinfo_glue_gluetype_invalid
- jobgroup_empty
- jobgroup_empty
AI-assisted analysis of jeecgboot/JeecgBoot@96fb33f5ec (2026-08-14).
Data as JSON: /api/errors/d0d570868fb158d0.
Report an issue: GitHub.