theonedev/onedev · error · ExplicitException
Cannot find issue board:
Error message
Cannot find issue board:
What it means
IssueBoardsPage resolves the board by name from the URL parameter. It computes the board index via BoardSpec.getBoardIndex over the project's hierarchy boards; a return value of -1 means no board with that name exists, and the page throws ExplicitException('Cannot find issue board: ' + boardName).
Source
Thrown at server-core/src/main/java/io/onedev/server/web/page/project/issues/boards/IssueBoardsPage.java:178
}
query = IssueQuery.merge(baseQuery, query);
var sort = new EntitySort();
sort.setDirection(EntitySort.Direction.ASCENDING);
sort.setField(NAME_BOARD_POSITION);
query.getSorts().add(sort);
return query;
}
public IssueBoardsPage(PageParameters params) {
super(params);
boards = getProject().getHierarchyBoards();
String boardName = params.get(PARAM_BOARD).toString();
if (StringUtils.isNotBlank(boardName)) {
boardIndex = BoardSpec.getBoardIndex(boards, boardName);
if (boardIndex == -1)
throw new ExplicitException(_T("Cannot find issue board: ") + boardName);
} else {
boardIndex = 0;
}
var iterationParam = params.get(PARAM_ITERATION).toString();
iterationSelectionModel = new LoadableDetachableModel<>() {
private IterationSelection getCurrentIteration() {
if (!getIterations().isEmpty()) {
var iteration = getIterations().iterator().next();
if (!iteration.isClosed())
return new IterationSelection.Specified(iteration);
}
return new IterationSelection.Unscheduled();
}
@Override
protected IterationSelection load() {View on GitHub (pinned to d44925c47c)
Solutions
- Correct the 'board' URL parameter to an existing board name exactly as shown on the Issues page.
- If the board was renamed or deleted, recreate it or update the shared/bookmarked link.
- Omit the board parameter to fall back to the project's first board.
- Check hierarchy projects: the board must exist in the current project or one of its parents.
Example fix
// before GET /projects/app/~issues?board=Sprint%20Backlog%202 // after GET /projects/app/~issues?board=Sprint%20Backlog
Defensive patterns
Strategy: validation
Validate before calling
List<BoardSpec> boards = project.getHierarchyBoards();
if (boards.stream().noneMatch(b -> b.getName().equals(boardName))) {
throw new IllegalArgumentException("Board not found: " + boardName);
} Try / catch
try {
// open issue boards page with board param
} catch (ExplicitException e) {
// fall back to default board (omit board param)
} Prevention
- Update shared/bookmarked links after renaming or deleting boards.
- Omit the board parameter to use the default (first) board.
- Match board names exactly (case-sensitive) when constructing URLs.
When it happens
Trigger: Visiting the issue boards page with PARAM_BOARD set to a name that does not match any board in the project (or its hierarchy), e.g. /~issues?board=OldBoard after the board was renamed/deleted.
Common situations: Bookmarked or shared links saved before a board rename; board deleted during housekeeping; URL parameter typed manually with wrong casing/spelling; switching projects where the board name differs.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- Issue schedule permission required to set iterations
- Iteration '${iterationName}' not found
- Issue ${issueReference} is not in current project
- Project not found or inaccessible: <projectPath>
- Branch not exist:
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/287b7fe004a94bf8.
Report an issue: GitHub.